Android : ListView + BaseAdapter-2简单应用

2023-11-23 02:20

本文主要是介绍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>

这篇关于Android : ListView + BaseAdapter-2简单应用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/414618

相关文章

Mysql表的简单操作(基本技能)

《Mysql表的简单操作(基本技能)》在数据库中,表的操作主要包括表的创建、查看、修改、删除等,了解如何操作这些表是数据库管理和开发的基本技能,本文给大家介绍Mysql表的简单操作,感兴趣的朋友一起看... 目录3.1 创建表 3.2 查看表结构3.3 修改表3.4 实践案例:修改表在数据库中,表的操作主要

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

springboot简单集成Security配置的教程

《springboot简单集成Security配置的教程》:本文主要介绍springboot简单集成Security配置的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录集成Security安全框架引入依赖编写配置类WebSecurityConfig(自定义资源权限规则

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda

Android自定义Scrollbar的两种实现方式

《Android自定义Scrollbar的两种实现方式》本文介绍两种实现自定义滚动条的方法,分别通过ItemDecoration方案和独立View方案实现滚动条定制化,文章通过代码示例讲解的非常详细,... 目录方案一:ItemDecoration实现(推荐用于RecyclerView)实现原理完整代码实现

Java中&和&&以及|和||的区别、应用场景和代码示例

《Java中&和&&以及|和||的区别、应用场景和代码示例》:本文主要介绍Java中的逻辑运算符&、&&、|和||的区别,包括它们在布尔和整数类型上的应用,文中通过代码介绍的非常详细,需要的朋友可... 目录前言1. & 和 &&代码示例2. | 和 ||代码示例3. 为什么要使用 & 和 | 而不是总是使

如何使用Python实现一个简单的window任务管理器

《如何使用Python实现一个简单的window任务管理器》这篇文章主要为大家详细介绍了如何使用Python实现一个简单的window任务管理器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起... 任务管理器效果图完整代码import tkinter as tkfrom tkinter i

Python循环缓冲区的应用详解

《Python循环缓冲区的应用详解》循环缓冲区是一个线性缓冲区,逻辑上被视为一个循环的结构,本文主要为大家介绍了Python中循环缓冲区的相关应用,有兴趣的小伙伴可以了解一下... 目录什么是循环缓冲区循环缓冲区的结构python中的循环缓冲区实现运行循环缓冲区循环缓冲区的优势应用案例Python中的实现库

SpringBoot整合MybatisPlus的基本应用指南

《SpringBoot整合MybatisPlus的基本应用指南》MyBatis-Plus,简称MP,是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,下面小编就来和大家介绍一下... 目录一、MyBATisPlus简介二、SpringBoot整合MybatisPlus1、创建数据库和