@


文中使用的xml布局文件

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="29dp"
        android:layout_marginTop="33dp"
        android:text="标题"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="4dp"
        android:layout_marginTop="18dp"
        android:text="内容"
        app:layout_constraintStart_toStartOf="@+id/textView"
        app:layout_constraintTop_toBottomOf="@+id/textView" />
</androidx.constraintlayout.widget.ConstraintLayout>

//文中使用的实体类
public class News {
    public String title; // 标题
    public String content; //内容
}

//文中使用的成员变量
ListView mListView;
List<News> mNewsList = new ArrayList<>();
List<Map<String,String>> mapList = new ArrayList<>();
//文中使用的数据
for (int i = 0; i < 50; i++) {
	News news = new News();
	news.title = "标题" + i;
	news.content = "内容" + i;
	mNewsList.add(news);
	Map<String,String> map = new HashMap<>();
	map.put("title","标题" + i);
	map.put("content","内容" + i);
	mapList.add(map);
}

ArrayAdapter

简单的数组适配器,继承自BaseAdapter,适用于填充数据是字符串数组类型。

//一般使用
mListView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, new String[]{
		"hello",
		"world",
		"你好"
}));
//自定义ArrayAdapter:可以使用对象列表或数组来对自定义布局进行数据绑定
class MyArrayAdapter extends ArrayAdapter<News>{
   int mResource;
   public MyArrayAdapter(@NonNull Context context, int resource) {
       super(context, resource);
       mResource = resource;
   }

   @Override
   public int getCount() {
       return mNewsList.size();
   }

   @Nullable
   @Override
   public News getItem(int position) {
       return mNewsList.get(position);
   }

   @Override
   public int getPosition(@Nullable News item) {
       return mNewsList.indexOf(item);
   }

   @NonNull
   @Override
   public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
       MyViewHolder myViewHolder = null;
       if(convertView == null){
           convertView = getLayoutInflater().inflate(mResource,parent,false);
           myViewHolder = new MyViewHolder(convertView);
           convertView.setTag(myViewHolder);
       }else{
           myViewHolder = (MyViewHolder) convertView.getTag();
       }

       myViewHolder.tv1.setText(mNewsList.get(position).title);
       myViewHolder.tv2.setText(mNewsList.get(position).content);

       return convertView;
   }

   class MyViewHolder{
       TextView tv1,tv2;
       public MyViewHolder(View view){
           tv1 = view.findViewById(R.id.textView);
           tv2 = view.findViewById(R.id.textView2);
       }
   }
}

SimpleAdapter

较为复杂的适配器,同样继承于BaseApapter,适用于不太复杂的对象和布局数据绑定。

//参数一:上下文
//参数二:数据列表List<Map<String,String>>
//参数三:布局文件
//参数四:map中的键
//参数五:布局中对应的控件id
mListView.setAdapter(new SimpleAdapter(this,mapList,R.layout.item_list,new String[]{
   "title","content"
},new int[]{
    R.id.textView,R.id.textView2
}));

BaseAdapter

所有Adapter的基类,一般使用它进行扩展。

class MyListViewAdapter extends BaseAdapter{

    @Override
    public int getCount() {
        return mNewsList.size();
    }

    @Override
    public Object getItem(int i) {
        return mNewsList.get(i);
    }

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

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        MyViewHolder myViewHolder = null;
        if(view == null){
            view = getLayoutInflater().inflate(R.layout.item_list,viewGroup,false);
            myViewHolder = new MyViewHolder(view);
            view.setTag(myViewHolder);
        }else{
            myViewHolder = (MyViewHolder)view.getTag();
        }
        myViewHolder.tv1.setText(mNewsList.get(i).title);
        myViewHolder.tv2.setText(mNewsList.get(i).content);
        return view;
    }

    class MyViewHolder{
        TextView tv1,tv2;
        public MyViewHolder(View view){
            tv1 = view.findViewById(R.id.textView);
            tv2 = view.findViewById(R.id.textView2);
        }
    }
}
posted on 2022-08-30 16:58  mt_procode  阅读(46)  评论(0)    收藏  举报