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