Android : ListView + BaseAdapter-简单应用

news2024/12/29 4:04:08

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

示例图:

实体类 News.java

package com.example.mylistviewbaseadapter.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.mylistviewbaseadapter;

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.mylistviewbaseadapter.entity.News;

import java.util.List;

public class NewsAdpater extends BaseAdapter {
    private List<News> date;
    private Context context;
    //構造器
    public NewsAdpater(List<News> date,Context context){
        this.date = date;
        this.context = context;
    }

    //BaseAdapter最基本的几个方法:
    // 1. getCount 填充的数据集数
    // 2.getItem 数据集中指定索引对应的数据项
    // 3. getItemId 指定行所对应的ID
    // 4. getView 每个Item所显示的类容

    @Override
    public int getCount() {
        //充的数据集数
        return date.size();
    }

    @Override
    public Object getItem(int position) {
        //数据集中指定索引对应的数据项
        return date.get(position);
    }

    @Override
    public long getItemId(int position) {
        // 指定行所对应的ID
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        //每个Item所显示的类容

        convertView =  LayoutInflater.from(context).inflate(R.layout.list_test,parent,false);
        ImageView imageView = convertView.findViewById(R.id.btnImg);
        TextView tvTitle = convertView.findViewById(R.id.tvH);
        TextView tbCont = convertView.findViewById(R.id.tvCont);

        //摄入值
        imageView.setBackgroundResource(date.get(position).getImg());
        tvTitle.setText(date.get(position).getTitile());
        tbCont.setText(date.get(position).getContent());
        return convertView;
    }
/**
     //优化
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHoler holer = null;
        if(holer == null){
            holer = new ViewHoler();
            //每个Item所显示的类容

            convertView =  LayoutInflater.from(context).inflate(R.layout.list_test,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);

        }else{
            holer = (ViewHoler)convertView.getTag();
        }

        //摄入值
        holer.imageView.setBackgroundResource(date.get(position).getImg());
        holer.tvTitle.setText(date.get(position).getTitile());
        holer.tbCont.setText(date.get(position).getContent());
        return convertView;
    }
    static class ViewHoler{
        ImageView imageView;
        TextView tvTitle;
        TextView tbCont;
    }
*/
}

MainActivity.java

package com.example.mylistviewbaseadapter;

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.mylistviewbaseadapter.entity.News;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

public class MainActivity extends AppCompatActivity{

   
    private ListView listView;
    private Context context;
    private List<News> listNews =null;

    //适配器
    private  NewsAdpater newsAdpater=null;
    @Override
    protected 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() {
            @Override
            public 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:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <ListView
        android:id="@+id/listVi"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

</LinearLayout>

list_test.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会覆盖子类控件而直接获取焦点;
    -->
    <ImageView
        android:id="@+id/btnImg"
        android:layout_width="200dp"
        android:layout_height="100dp"
        android:scaleType="fitXY"
        android:src="@mipmap/bg"
        />
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <TextView
            android:id="@+id/tvH"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="我是标题"
            android:gravity="center"
            android:textSize="16sp"
            android:textStyle="bold"
            />
        <ScrollView
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

        <TextView
            android: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>

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

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

相关文章

Linux下安装Foldseek并从蛋白质的PDB结构中获取 3Di Token 和 3Di Embedding

0. 说明&#xff1a; Foldseek 是由韩国国立首尔大学 (Seoul National University) 的 Martin Steinegger (MMseqs2 和 Linclust 的作者) 开发的一款用于快速地从大型蛋白质结构数据库中检索相似结构蛋白质的工具&#xff0c;可以用于计算两个蛋白之间的结构相似性&#xff0c…

Unity收费对谁影响最大

Unity的收费政策对以下几类人群影响最大&#xff1a; 游戏开发商&#xff1a;Unity收费政策中最直接的影响对象就是游戏开发商。对于那些使用Unity引擎制作游戏的开发商来说&#xff0c;他们将需要考虑新的许可证费用和服务费用&#xff0c;这可能会对他们的盈利和发展产生影响…

debian10 开启rdp安装firefox并解决firefox 中文乱码

debian10 开启rdp安装firefox apt -y install tigervnc-standalone-server apt -y install xrdp tigervnc-standalone-server systemctl enable xrdp --nowapt install firefox-esrmstsc连接 firefox-settings-general-fonts-advanced-Simplified Chinese

【Azure 架构师学习笔记】-Azure Storage Account(7)- 权限控制

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Storage Account】系列。 接上文 【Azure 架构师学习笔记】-Azure Storage Account&#xff08;6&#xff09;- File Layer 前言 存储帐户作为其中一个数据终端存储&#xff0c;对安全性的要求非常高&#xff0c;不管…

整套数字化招采平台安全防御体系

招采平台作为数字化供应链的重要组成部分&#xff0c;需要确保招标采购过程的安全性,主体信息和交易数据信息尤为重要,通过必要的安全架构、技术和安全管理制度&#xff0c;做到事前防范、事中监管和事后审计的安全防御。 一、平台技术安全架构 1、先进的技术架构&#xff0c…

单链表OJ题--9.环形链表

9.环形链表 141. 环形链表 - 力扣&#xff08;LeetCode&#xff09; /* 解题思路&#xff1a; 定义快慢指针fast,slow, 如果链表确实有环&#xff0c;fast指针一定会在环内追上slow指针。 */typedef struct ListNode Node; bool hasCycle(struct ListNode *head) {Node* slow …

英语六级范文模板

目录 现象解释 观点选择 问题解决 六级只考议论文&#xff0c;我们将从现象解释&#xff0c;观点选择&#xff0c;问题解决三个角度给出范文&#xff1a; 多次使用的句子&#xff0c;就可以作为模板记下来~~ 现象解释 In the contemporary world, the ability to meet cha…

万字长文深入理解 cache,写出高性能代码

CACHE的一致性 Cache的一致性有这么几个层面 1. 一个CPU的icache和dcache的同步问题 2. 多个CPU各自的cache同步问题 3. CPU与设备&#xff08;其实也可能是个异构处理器&#xff0c;不过在Linux运行的CPU眼里&#xff0c;都是设备&#xff0c;都是DMA&#xff09;的cache同…

创建 Springboot 项目

前言 创建 Spring Boot 项目是很多Java开发人员入门的重要一步&#xff01; 欢迎来到本篇关于创建 Spring Boot 项目的博客&#xff01;Spring Boot作为一个快速、便捷的开发框架&#xff0c;为我们提供了简化和加速应用程序开发的利器。 在这个数字化时代&#xff0c;快速响…

Linux常用命令——bmodinfo命令

在线Linux命令查询工具 bmodinfo 显示给定模块的详细信息 补充说明 bmodinfo命令用于显示给定模块的详细信息。 语法 bmodinfo(选项)(参数)选项 -a&#xff1a;显示模块作者&#xff1b; -d&#xff1a;显示模块的描述信息&#xff1b; -l&#xff1a;显示模块的许可信息…

geemap学习笔记011:可视化遥感影像随时间的变化

前言 本节主要是介绍 .ts_inspector 工具&#xff0c;它是可以可视化遥感影像随时间的变化&#xff0c;与先前文章中介绍的.split_map差别在于&#xff0c;它可以加载时间序列数据。 1 导入库 !pip install geemap #安装geemap库 import ee import geemapgeemap.show_youtub…

Laravel 安装(笔记一)

目录 第一步、Laravel 一般使用 composer安装 第二步、使用composer安装项目 第三步、配置环境 第四步、访问域名&#xff0c;安装完成 Laravel 官网 l​​​​​​​Installation - Laravel 中文网 为 Web 工匠创造的 PHP 框架 第一步、Laravel 一般使用 composer安装 如…

蔚来「换电」赚钱养家,长安首家进场站台

作者 | 张祥威 编辑 | 德新 蔚来的「换电」业务开始赚钱养家。 11月21日下午&#xff0c;蔚来宣布与长安汽车签署了换电业务的合作协议&#xff0c;双方将在换电网络建设与共享、换电车型研发等方面展开深入合作&#xff0c;并在推动建立换电电池标准、建立高效的电池资产管…

时序预测 | Matlab实现HPO-ELM猎食者算法优化极限学习机的时间序列预测

时序预测 | Matlab实现HPO-ELM猎食者算法优化极限学习机的时间序列预测 目录 时序预测 | Matlab实现HPO-ELM猎食者算法优化极限学习机的时间序列预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab实现HPO-ELM猎食者算法优化极限学习机时间序列预测 1.data为数据集…

vue3-响应式函数

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;Vue篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来vue篇专栏内容:vue3-响应式函数 目录 ref 响应式函数 引言&#xff1a; ref 函数 reactive 函数 Reactive 与…

阿里云优惠券如何领取(阿里云在哪领取优惠券)

阿里云优惠券是阿里云为了回馈广大用户而推出的一种优惠活动&#xff0c;可以帮助用户在购买阿里云产品和服务时享受一定的优惠&#xff0c;本文将为大家介绍如何领取阿里云优惠券。 1、通过阿里云官网活动页面领取 阿里云会不定期举办一些优惠活动&#xff0c;例如双十一、双…

import.meta.glob() 如何导入多个目录下的资源

import.meta.glob() 如何导入多个目录下的资源 刚开始用 vite&#xff0c;在做动态路由的时候遇到了这个问题&#xff0c;看到其它教程上都是只引用了一个目录层级的内容&#xff0c;比如这样&#xff1a; let RouterModules import.meta.glob("/src/view/*/*.vue"…

单链表OJ题——11.随机链表的复制

11.随机链表的复制 138. 随机链表的复制 - 力扣&#xff08;LeetCode&#xff09; /* 解题思路&#xff1a; 此题可以分三步进行&#xff1a; 1.拷贝链表的每一个节点&#xff0c;拷贝的节点先链接到被拷贝节点的后面 2.复制随机指针的链接&#xff1a;拷贝节点的随机指针指向…

数组扩展方法(一)

Array.prototype.forEach MDN解释forEach()方法是对数组的每个元素执行一个给定的函数&#xff0c;换句话来说就是在调用forEach()方法的时候&#xff0c;需要传入一个回调函数callback&#xff0c;循环每个数组内部元素时都会执行一次传入的回调函数callback forEach()方法的…