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.hqwc.cn/news/207791.html

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

相关文章

Linux中的进程程序替换

Linux中的进程程序替换 1. 替换原理2. 替换函数3. 函数解释4. 命名理解程序替换的意义 1. 替换原理 替换原理 用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec函数以执行另一个程序。当进程调用一种exec函数时,该进程的…

智慧法院档案数字化解决方案

智慧法院档案数字化解决方案可以采用以下步骤&#xff1a; 1. 确定数字化目标&#xff1a;明确数字化的目标和范围&#xff0c;比如将所有的案件相关文件、纸质档案和材料进行数字化。 2. 确定数字化流程&#xff1a;制定数字化的流程和标准&#xff0c;比如采用哪些设备和软件…

解决requests库进行爬虫ip请求时遇到的错误的方法

目录 一、超时错误 二、连接错误 三、拒绝服务错误 四、内容编码错误 五、HTTP错误 在利用requests库进行网络爬虫的IP请求时&#xff0c;我们可能会遇到各种错误&#xff0c;如超时、连接错误、拒绝服务等等。这些错误通常是由目标网站的限制、网络问题或我们的爬虫代码中…

docker、elasticsearch8、springboot3集成备忘

目录 一、背景 二、安装docker 三、下载安装elasticsearch 四、下载安装elasticsearch-head 五、springboot集成elasticsearch 一、背景 前两年研究了一段时间elasticsearch&#xff0c;当时也是网上找了很多资料&#xff0c;最后解决个各种问题可以在springboot上运行了…

Java核心知识点整理大全8-笔记

Java核心知识点整理大全7-笔记-CSDN博客文章浏览阅读1.2k次&#xff0c;点赞27次&#xff0c;收藏26次。但是如果锁的竞争激烈&#xff0c;或者持有锁的线程需要长时间占用锁执行同步块&#xff0c;这时候就不适合 使用自旋锁了&#xff0c;因为自旋锁在获取锁前一直都是占用 c…

C语言--判断年月日是否合理

一.题目描述 比如输入2001&#xff0c;2&#xff0c;29&#xff0c;输出&#xff1a; 不合理 。因为平年的二月只有28天 比如输入2000&#xff0c;6&#xff0c;31&#xff0c;输出&#xff1a;不合理。因为6月是小月&#xff0c;只有30天。 二.思路分析 本题主要注意两个问…

优先级队列(priority_queue)

文章目录 优先级队列的定义定义&#xff1a;接口头文件优先队列和堆的关系使用&#xff1a;排序的规则容器 仿函数应用 队列存指针问题&#xff1a; 优先级队列的定义 定义&#xff1a; 黄色部分是仿函数 接口 头文件 这里不需要包含其他的头文件只需要使用队列的头文件就可以…

Mybatis plus 简介

简介 MyBatis-Plus (opens new window)&#xff08;简称 MP&#xff09;是一个 MyBatis (opens new window)的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。 官网:https://baomidou.com/pages/24112f/ 特性 无侵入&…

基于STM32的烟雾浓度检测报警仿真设计(仿真+程序+讲解视频)

这里写目录标题 &#x1f4d1;1.主要功能&#x1f4d1;2.仿真&#x1f4d1;3. 程序&#x1f4d1;4. 资料清单&下载链接&#x1f4d1;[资料下载链接](https://docs.qq.com/doc/DS0VHTmxmUHBtVGVP) 基于STM32的烟雾浓度检测报警仿真设计(仿真程序讲解&#xff09; 仿真图prot…

VirtualBox配置共享文件夹,如果你一直安装增强功能失败,又没有尝试过改内核版本。。。

1 背景 想设置电脑本地和virtualbox虚拟机之间的共享文件夹&#xff0c;这样在电脑本地对共享文件的修改&#xff0c;就可以在虚拟机中被感知。 如果想配置共享文件夹&#xff0c;前提是必须安装virtualbox的增强功能。 我的虚拟机是7.0.10版本 安装的centOS8.5 可以看我之前的…

最常用的5款报表系统

在这个信息化飞速发展的时代&#xff0c;报表系统已经成为了企业管理和决策的重要工具。随着市场的需求不断增长&#xff0c;报表系统也在不断地更新和完善。如今&#xff0c;市面上有数不尽的报表系统&#xff0c;但是哪款才是最常用的呢&#xff1f;接下来&#xff0c;我们将…

【LeetCode刷题】--43.字符串相乘

43.字符串相乘 方法一&#xff1a;做加法&#xff0c;模拟竖式乘法的方法计算乘积 class Solution {public String multiply(String num1, String num2) {if(num1.equals("0") || num2.equals("0")){return "0";}String res "0";//nu…