Android : ListView + BaseAdapter-2简单应用

 ​​容器与适配器:​​​​​        http://t.csdnimg.cn/ZfAJ7

实体类 News.java

package com.example.mylistviewadapter2.entity;public class News {private   String title;private  String content;private int img;public News(String title, String content, int img){this.title = title;this.content = content;this.img =img;}public String getTitile() {return title;}public void setTitile(String title) {this.title = title;}public String getContent() {return content;}public void setContent(String content) {this.content = content;}public int getImg() {return img;}public void setImg(int img) {this.img = img;}
}

适配器 写个类继承BaseAdapter 

package com.example.mylistviewadapter2;import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;import com.example.mylistviewadapter2.entity.News;import java.util.List;public class NewsAdpater extends BaseAdapter {private List<News> date;private Context context;//两个标记类private  static final  int TYPE_NEWS_1 = 0;private  static final  int TYPE_NEWS_2 = 1;//構造器public NewsAdpater(List<News> date, Context context){this.date = date;this.context = context;}//BaseAdapter最基本的几个方法:// 1. getCount 填充的数据集数// 2.getItem 数据集中指定索引对应的数据项// 3. getItemId 指定行所对应的ID// 4. getView 每个Item所显示的类容@Overridepublic int getCount() {//充的数据集数return date.size();}@Overridepublic Object getItem(int position) {//数据集中指定索引对应的数据项return date.get(position);}@Overridepublic long getItemId(int position) {// 指定行所对应的IDreturn position;}//重写 getItemViewType 返回对应的item布局类型@Overridepublic int getItemViewType(int position) {if(position % 2 == 0){return TYPE_NEWS_1;}else{return TYPE_NEWS_2;}}//重写 getViewTypeCount 返回总共有几个item布局类型@Overridepublic int getViewTypeCount() {return 2;}//优化@Overridepublic View getView(int position, View convertView, ViewGroup parent) {//获取布局类型int type = getItemViewType(position);ViewHoler holer = null;ViewHoler2 holer2 = null;if(convertView == null){switch (type){case TYPE_NEWS_1:holer = new ViewHoler();//每个Item所显示的类容convertView =  LayoutInflater.from(context).inflate(R.layout.left_list_view,parent,false);holer.imageView = convertView.findViewById(R.id.btnImg);holer.tvTitle = convertView.findViewById(R.id.tvH);holer.tbCont = convertView.findViewById(R.id.tvCont);convertView.setTag(holer);break;case TYPE_NEWS_2:holer2 = new ViewHoler2();//每个Item所显示的类容convertView =  LayoutInflater.from(context).inflate(R.layout.right_list_view,parent,false);holer2.imageView = convertView.findViewById(R.id.btnImg2);holer2.tvTitle = convertView.findViewById(R.id.tvH2);holer2.tbCont = convertView.findViewById(R.id.tvCont2);convertView.setTag(holer2);break;}}else {switch (type){case TYPE_NEWS_1:holer = (ViewHoler)convertView.getTag();break;case  TYPE_NEWS_2:holer2 = (ViewHoler2)convertView.getTag();break;}}switch (type){case TYPE_NEWS_1://摄入值holer.imageView.setBackgroundResource(date.get(position).getImg());holer.tvTitle.setText(date.get(position).getTitile());holer.tbCont.setText(date.get(position).getContent());break;case TYPE_NEWS_2://摄入值holer2.imageView.setBackgroundResource(date.get(position).getImg());holer2.tvTitle.setText(date.get(position).getTitile());holer2.tbCont.setText(date.get(position).getContent());break;}return convertView;}static class ViewHoler{ImageView imageView;TextView tvTitle;TextView tbCont;}static class ViewHoler2{ImageView imageView;TextView tvTitle;TextView tbCont;}
}

MainActivity.java

package com.example.mylistviewadapter2;import static android.widget.Toast.LENGTH_SHORT;import androidx.appcompat.app.AppCompatActivity;import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;import com.example.mylistviewadapter2.entity.News;import java.util.ArrayList;
import java.util.List;public class MainActivity extends AppCompatActivity {//private ListView listView;private Context context;private List<News> listNews =null;//适配器private  NewsAdpater newsAdpater=null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);context = this;listView = findViewById(R.id.listVi);listNews = new ArrayList<>();//传入内容for(int i= 0 ; i < 10; i++){listNews.add(new News("这是标题"+i,"我是内容我是内容我是内容我是内容我是内容我是内容我是内容"+i,R.mipmap.bg));}newsAdpater = new NewsAdpater(listNews,context);listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position, long id) {Toast.makeText(context, "点击了第" + position + "条数据", LENGTH_SHORT).show();}});//往容器设置适配器listView.setAdapter(newsAdpater);}}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:orientation="vertical"android:layout_height="match_parent"tools:context=".MainActivity"><ListViewandroid:id="@+id/listVi"android:layout_width="match_parent"android:layout_height="wrap_content"/></LinearLayout>

left_list_view.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:descendantFocusability="blocksDescendants"android:layout_height="match_parent"><!--解决 listView.setOnItemClickListener 事件失效
1>:原因如下:
此时 在item 区域中,event(事件)的焦点被内部 View抢占了,也就是说只有 内部的View的click事件有效,而item的事件无法被触发,所以导致 点击listview的 item 时,不能响应点击事件;2>:解决方法如下:
在 item的根布局中添加如下属性即可:
android:descendantFocusability="blocksDescendants",表示 ViewGroup会覆盖子类控件而直接获取焦点;--><ImageViewandroid:id="@+id/btnImg"android:layout_width="200dp"android:layout_height="100dp"android:scaleType="fitXY"android:src="@mipmap/bg"/><LinearLayoutandroid:orientation="vertical"android:layout_width="match_parent"android:layout_height="wrap_content"><TextViewandroid:id="@+id/tvH"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="我是标题"android:gravity="center"android:textSize="16sp"android:textStyle="bold"/><ScrollViewandroid:layout_width="match_parent"android:layout_height="wrap_content"><TextViewandroid:id="@+id/tvCont"android:layout_marginTop="10px"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="我是内容文本asdfasdfasdfasdfasdfasdfs"android:textSize="12sp"android:textStyle=""/></ScrollView></LinearLayout>
</LinearLayout>

right_list_view.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:descendantFocusability="blocksDescendants"android:layout_height="match_parent"><!--解决 listView.setOnItemClickListener 事件失效
1>:原因如下:
此时 在item 区域中,event(事件)的焦点被内部 View抢占了,也就是说只有 内部的View的click事件有效,而item的事件无法被触发,所以导致 点击listview的 item 时,不能响应点击事件;2>:解决方法如下:
在 item的根布局中添加如下属性即可:
android:descendantFocusability="blocksDescendants",表示 ViewGroup会覆盖子类控件而直接获取焦点;--><LinearLayoutandroid:orientation="vertical"android:layout_width="200dp"android:layout_height="100dp"><TextViewandroid:id="@+id/tvH2"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="我是标题"android:gravity="center"android:textSize="16sp"android:textStyle="bold"/><ScrollViewandroid:layout_width="match_parent"android:layout_height="wrap_content"><TextViewandroid:id="@+id/tvCont2"android:layout_marginTop="10px"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="我是内容文本asdfasdfasdfasdfasdfasdfs"android:textSize="12sp"android:textStyle=""/></ScrollView></LinearLayout><ImageViewandroid:id="@+id/btnImg2"android:layout_width="200dp"android:layout_height="100dp"android:scaleType="fitXY"android:src="@mipmap/bg"/>
</LinearLayout>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/159508.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

金蝶云星空部署包导出文件

文章目录 金蝶云星空部署包导出文件 金蝶云星空部署包导出文件 打开补丁包后&#xff0c;贴入导出文件的文件夹&#xff0c;然后按F2即可导出到目标文件夹。

2023年最佳Aspera替代方案,选择适合的Aspera替代方案

查找当前可用的Aspera替代方案。比较 2023年Aspera替代方案的评级、评论、定价和功能。列出了市场上最好的Aspera替代方案&#xff0c;它们提供与 IBM Aspera 类似的竞争产品。对下面的Aspera替代方案进行排序&#xff0c;以根据需求做出最佳选择。 1、镭速 镭速&#xff08;私…

java继承和重写(代码演示)

java中的继承和重写 概念 继承 在 Java 中&#xff0c;继承是面向对象编程中的重要概念&#xff0c;它允许一个类&#xff08;称为子类&#xff09;继承另一个类&#xff08;称为父类&#xff09;的属性和方法。子类可以继承父类的非私有属性和方法&#xff0c;并且可以添加…

每日一题 2304. 网格中的最小路径代价(中等,动态规划)

由于他每一行的每一个值都可以到下一行的所有节点&#xff0c;且路径的代价没有什么相关性&#xff0c;所以只能用 O(mn2) 的动态规划求解 class Solution:def minPathCost(self, grid: List[List[int]], moveCost: List[List[int]]) -> int:m, n len(grid), len(grid[0])…

PC分页操作

page-size 每页显示条目个数 current-page 当前页数 total 数据总数 current-change【currentPage 改变时会触发】 <el-paginationbackgroundlayout"prev, pager, next"align"right"style"padding: 10px":page-size"pageParams.pagesize…

连接k8s和凌鲨

通过连接k8s和凌鲨&#xff0c;可以让研发过程中的重用操作更加方便。 更新容器镜像调整部署规模查看日志运行命令 架构 所有操作通过k8s proxy连接&#xff0c;通过设置namespace label赋予访问权限。只有赋予特定label的namespace才能被访问。 使用步骤 部署k8s proxy 你…

【Java】基于SaaS模式的Java基层医院卫生健康云HIS系统源码

一、模板管理 模板分为两种&#xff1a;病历模板和报表模板。模板管理是运营管理的核心组成部分&#xff0c;是基层卫生健康云中各医疗机构定制电子病历和报表的地方&#xff0c;各医疗机构可根据自身特点特色定制电子病历和报表&#xff0c;制作的电子病历及报表可直接在业务…

【qsort学习及改造冒泡排序能排序任何数】

qsort学习及改造冒泡排序能排序任何数 qsort的使用 qsort的使用 这个函数也不是很复杂&#xff01;&#xff01;&#xff01; qsort(void*base,size_t num,size_t width,int(int (__cdecl *compare )(const void *elem1, const void *elem2 )))  void * base,为数组的基地…

【深度学习】python调用超分Real-ESRGAN

Real-ESRGAN是超分自然场景图和动漫图&#xff0c;视频也可以&#xff0c;项目地址&#xff1a;https://github.com/xinntao/Real-ESRGAN/tree/master 安装python包&#xff1a; basicsr>1.4.2 facexlib>0.2.5 gfpgan>1.3.5 numpy opencv-python Pillow torch>1.…

GD32替换STM32使用HAL库开发问题

GD32HAL库开发问题 1can初始化进入error handle2发送邮箱不能按照填写顺序发送3 GD32修改代码被stm32cudemx覆盖问题 1can初始化进入error handle HAL库的HAL_CAN_Init中&#xff0c;hcan->Instance->MSR寄存器无法清零&#xff0c;STM32先清零&#xff0c;再退出睡眠模…

编译 CUDA加速的 OpenCV-4.8.0 版本

文章目录 前言一、编译环境二、前期准备三、CMake编译四、VS编译OpenCV.sln五、问题 前言 由于项目需要用上CUDA加速的OpenCV&#xff0c;编译时也踩了不少坑&#xff0c;所以这里记录一下。 一、编译环境 我的编译环境是&#xff1a; Win10 RTX4050 CUDA-12.0 CUDNN 8.9.…

代码混淆不再愁:一篇掌握核心技巧

​ 1. 概述 代码混淆是将计算机程序的代码转换成一种功能上等价&#xff0c;但是难以阅读和理解的形式。 对于软件开发者来说&#xff0c;代码混淆可以在一定程度上保护程序免被逆向。 对于逆向工程师来说&#xff0c;学习代码混淆可以帮助我们研究反混淆技术。 2. 常见混淆…

半导体工艺控制设备1

半导体工艺控制设备对芯片良率至关重要&#xff0c;随着制程微缩需求倍增。工艺节点每缩减一代&#xff0c;工艺中产生的致命缺陷数量会增加 50%&#xff0c;因此每一道工序的良品率都要保持在非常高的水平才能保证最终的良品率。当工序超过 500 道时&#xff0c;只有保证每一道…

污水处理智能化:污水处理拓扑图的未来发展趋势

随着城市化进程的不断加速&#xff0c;城市污水处理已经成为了一个重要的问题。污水处理不仅关系到城市环境的质量&#xff0c;还直接影响着人们的生活质量和健康。污水处理拓扑图作为一种新型的污水处理技术&#xff0c;已经被广泛应用于各种污水处理设施中。本文将介绍污水处…

如何判断客户对你是不是真的满意

我们平时生活中打个滴滴、叫个外卖&#xff0c;都会让做星级评价&#xff0c;就算去银行办业务&#xff0c;也会让按个按钮&#xff0c;对窗口的服务做个评价…… 再问一个问题&#xff1a;客户满意了&#xff0c;您的生意就一定好吗&#xff1f; 一、满意度&#xff1a;质量监…

2023 IDEA大会开幕 共探AI新篇章下的技术创新与创业

11月22日&#xff0c;AI与数字经济领域一年一度的科创盛会&#xff0c;2023 IDEA大会在深圳举行。IDEA研究院创院理事长、美国国家工程院外籍院士沈向洋在会上发表主旨演讲&#xff0c;发布IDEA研究院的重磅研产结晶与市场化成果&#xff1b;在大咖云集的论坛环节&#xff0c;多…

AIOps探索 | 应急处置中排障的降本增效方法探索(上)

文章来源&#xff1a;公众号ID-布博士&#xff08;擎创科技资深产品专家&#xff09; 哈喽~友友们大家好&#xff0c;最近运维界也是蛮热闹的&#xff0c;前有语雀多次崩溃&#xff0c;后有阿里全系产品集体故障&#xff0c;不管是哪种&#xff0c;都足够逼疯一个运维工程师。…

Web自动化测试流程:从入门到精通,帮你成为测试专家!

Web应用程序在今天的软件开发中占据着越来越重要的地位。保证Web应用程序的质量和稳定性是非常必要的&#xff0c;而自动化测试是一种有效的方法。本文将介绍Web自动化测试流程&#xff0c;并提供代码示例。 步骤一&#xff1a;选取测试工具 选择适合自己团队的自动化测试工具…

数环通对企业销售业务流程(O2C)的成熟度模型分享

保持紧密的客户关系&#xff0c;给客户留下良好的第一印象至关重要&#xff0c;而从下单到顺利履约是实现这一目标的最重要一环。 客户在做出购买决策后往往在最开始是充满了正向情绪&#xff08;例如兴奋、期待&#xff09;&#xff0c;但随着时间的推移&#xff0c;焦虑感会持…