首页 > 其他分享 >ListView用法及BaseAdapter详解

ListView用法及BaseAdapter详解

时间:2022-12-24 20:44:25浏览次数:33  
标签:viewholder BaseAdapter 详解 View import android ListView public view

1.先上代码

布局部分:items.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">


    <ImageView
        android:id="@+id/image"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_margin="20dp"
        android:background="@color/black"
        android:src="@mipmap/ic_launcher"
        />
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="140dp"
        android:padding="20dp"
        android:orientation="vertical">
        <TextView
            android:id="@+id/name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="name:xxx"
            android:textSize="20dp"/>
        <TextView
            android:id="@+id/quote"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="quote:xxxxxxxxx"
            android:textSize="20dp"/>
        <TextView
            android:id="@+id/age"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="age:xx"
            android:textSize="20dp"/>


    </LinearLayout>
</LinearLayout>

MainActivity部分

 package com.example.exp;

import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.RecyclerView;

import android.annotation.SuppressLint;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;

import org.w3c.dom.Text;

 public class MainActivity extends AppCompatActivity {
    private ListView listView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        listView=findViewById(R.id.lv);
        String name[]=new String[]{"wcb","jl","gcf","pod"};
        listView.setAdapter(new Mybaseadapter(getApplicationContext(),name));



    }
}

class Mybaseadapter extends BaseAdapter{
     private String[] data;
     private Context context;
     private LayoutInflater layoutInflater=null;
    public Mybaseadapter(Context context,String[] data) {
        super();
        this.context=context;
        this.data=data;
        layoutInflater=LayoutInflater.from(context);
    }
    static class Viewholder{
        public ImageView imageView;
        public TextView textView1,textView2,textView3;
    }

    @Override
    public int getCount() {
        return data.length;
    }

    @Override
    public Object getItem(int i) {
        return null;
    }

    @Override
    public long getItemId(int i) {
        return 0;
    }

    @Override
    public View getView(int positition, View view, ViewGroup viewGroup) {
        Viewholder viewholder=null;
        if(view ==null){
            view=layoutInflater.inflate(R.layout.items,null);
            viewholder=new Viewholder();
            viewholder.imageView=view.findViewById(R.id.image);
            viewholder.textView1=view.findViewById(R.id.name);
            viewholder.textView2=view.findViewById(R.id.quote);
            viewholder.textView3=view.findViewById(R.id.age);
            view.setTag(viewholder);

        }else {
            viewholder=(Viewholder)view.getTag();
        }
        viewholder.imageView.setImageResource(R.mipmap.ic_launcher);
        viewholder.textView1.setText(data[position]);
        viewholder.textView2.setText("??????");
        viewholder.textView3.setText("18");
        return view;
    }
}

2.BaseAdapter

baseadapter是适用于listview的适配器,使用其须重新实现4个方法,关键方法为getView(),ViewHolder类定义了listview中具体单元布局的模板

ListView中的每一个Item显示都需要Adapter调用一次getView的方法,这个方法会传入一个convertView的参数,返回的View就是这个Item显示的View。如果当Item的数量足够大,再为每一个Item都创建一个View对象,必将占用很多内存,创建View对象(Inflater.inflate(R.layout.lv_item, null);从xml中生成View,这是属于IO操作)也是耗时操作,所以必将影响性能。Android提供了一个叫做Recycler(反复循环器)的构件,就是当ListView的Item从上方滚出屏幕视角之外,对应Item的View会被缓存到Recycler中,相应的会从下方生成一个Item,而此时调用的getView中的convertView参数就是滚出屏幕的Item的View,所以说如果能重用这个convertView,就会大大改善性能。

然后来看函数原型publicView getView(intposition, View convertView, ViewGroup parent),参数中position是指当前item在屏幕中的位置,convertView相当于缓存的作用。函数返回一个View作为ListView中一个item的布局。

标签:viewholder,BaseAdapter,详解,View,import,android,ListView,public,view
From: https://www.cnblogs.com/chuimber/p/17003355.html

相关文章

  • WPF开发之Prism详解【内附源码】
    在实际应用开发中,随着项目业务逐渐复杂,耦合度会越来越高,维护成本也会直线上升,所以解耦也变得越来越重要。Prism框架为WPF开发中解耦提供了非常便捷的应用。今天主要以一个......
  • Spring Security系列教程29--OAuth2.0协议详解
    前言截止到现在,一一哥已经带各位把SpringSecurity中的主要功能学完了,并且剖析了这些内容的底层实现原理,希望你可以有所收获。但是在安全认证领域,还有另一种很重要的授权机......
  • pom.xml文件详解
    <projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0h......
  • 详解MySQL事务(transaction),用图直观解释了MySQL脏读、不可重复读、幻读的问题
    事务事务是一组操作的集合,会把所有操作作为一个整体去执行,要么同时成功,要么同时失败。事务操作查看/设置事务提交方式SELECT@@autocommit;#1为自动,0为手动SET@@......
  • 一阶段目标检测网络-RetinaNet 详解
    摘要1,引言2,相关工作3,网络架构3.1,Backbone3.2,Neck3.3,Head4,FocalLoss4.1,CrossEntropy4.2,BalancedCrossEntropy4.3,FocalLossDefinition5,代码解读5.......
  • Linux目录架构详解
    Linux和​​Windows​​​操作系统的显着区别之一就是目录架构的不同。Linux操作系统的目录架构遵循文件系统层级结构标准。不知你是否使用ls命令浏览过Linux的根目录"/",亲......
  • BMP格式详解
    BMP文件格式详解(BMPfileformat)BMP文件格式,又称为Bitmap(位图)或是DIB(Device-IndependentDevice,设备无关位图),是Windows系统中广泛使用的图像文件格式。由于它可以不作......
  • 看一遍就理解:动态规划详解
    前言我们刷leetcode的时候,经常会遇到动态规划类型题目。动态规划问题非常非常经典,也很有技巧性,一般大厂都非常喜欢问。今天跟大家一起来学习动态规划的套路,文章如果有......
  • Junit5 详解
    简述junit5是当前java比较流行的单元测试框架。junit5官网:https://junit.org/junit5/官方文档:https://junit.org/junit5/docs/current/user-guide/中......
  • H264码流中SPS PPS详解
    转载地址:https://zhuanlan.zhihu.com/p/278962391SPS和PPS从何处而来?2SPS和PPS中的每个参数起什么作用?3如何解析SDP中包含的H.264的SPS和PPS串?1客户端抓包在做......