Android 活用Adapter适配ListView

Listview

生活中我们常见的qq,微信消息界面,联系人界面都是用Listview来实现的,而简单的List view 只能显示一串文字,我们怎样可以自定义列表内容并且赋值给它呢?
那就用到了Adapter适配器,下面看一下代码:

主页的布局文件不多说了,只包含了一个ListView组件。
然后我们为列表的item样式设计一个布局:
左边一个图片,右边有上下两行信息。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="horizontal"
              android:layout_width="match_parent"
              android:layout_height="match_parent">
    <ImageView
            android:id="@+id/image"
            android:layout_margin="14dp"
            android:layout_width="50dp" android:layout_height="50dp"/>
    <LinearLayout android:layout_width="wrap_content"
                  android:orientation="vertical"
                  android:layout_height="wrap_content">
        <TextView android:id="@+id/name"
                  android:layout_width="wrap_content"
                  android:textSize="20dp"
                  android:textColor="#000000"
                  android:layout_marginTop="15dp"
                  android:layout_height="wrap_content"/>
        <TextView android:id="@+id/message"
                  android:layout_width="wrap_content"
                  android:textColor="#5e5c5c"

                  android:layout_marginBottom="6dp"
                  android:layout_height="wrap_content"/>
    </LinearLayout>

做完布局之后,我们还需要新建一个相应的实体类来为它赋值。
.java文件:
我们只要在类名地方右键点击generate,就会弹出相应的构造,get,set方法,非常方便。

package com.example.myapplication;

public class ListItem {
    private String name ;
    private int imageId;
    private String mes;

    public String getMes() {
        return mes;
    }

    public ListItem(String name, int imageId, String mes) {
        this.name = name;
        this.imageId = imageId;
        this.mes = mes;

    }

    public String getName() {
        return name;
    }

    public int getImageId() {
        return imageId;
    }
}

接下来,我们要写Adapter来为list赋值了。

public class ListAdapter extends ArrayAdapter<ListItem> {

    private int resourceId;
    public ListAdapter(@NonNull Context context, int resource, @NonNull List<ListItem> objects) {
        super(context, resource, objects);
        resourceId = resource;
    }

    class ViewHolder {
        ImageView imageView;
        TextView textView1;
        TextView textView2;
    }
    @NonNull
    @Override
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
        ListItem item = getItem(position);
        View view;
        ViewHolder viewHolder;
        if(convertView == null){
            view = LayoutInflater.from(getContext()).inflate(resourceId,parent,false);
            viewHolder = new ViewHolder();
            viewHolder.imageView = (ImageView) view.findViewById(R.id.image);
            viewHolder.textView1 = (TextView) view.findViewById(R.id.name);
            viewHolder.textView2 = (TextView) view.findViewById(R.id.message);
            view.setTag(viewHolder);
        }else{
            view = convertView;
            viewHolder = (ViewHolder)view.getTag();
        }

        viewHolder.imageView.setImageResource(item.getImageId());
        viewHolder.textView1.setText(item.getName());
        viewHolder.textView2.setText(item.getMes());
        return view;
    }

}

最后回到我们的主页面的java文件中,我们初始化数据,并加载布局到listview中。

public class Main2Activity extends AppCompatActivity {

    private List<ListItem> items = new ArrayList<>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        init();
        ListAdapter adapter = new ListAdapter(Main2Activity.this,R.layout.user_item,items);
        ListView listView = (ListView)findViewById(R.id.list);
        listView.setAdapter(adapter);
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                ListItem item = items.get(i);
                Toast.makeText(Main2Activity.this, item.getName(), Toast.LENGTH_SHORT).show();
            }
        });
    }

    private void init() {
        ListItem p1 = new ListItem("张小生",R.drawable.img01,"在吗?");
        items.add(p1);
        ListItem p2 = new ListItem("小王",R.drawable.img02,"什么时候出去吃饭?");
        items.add(p2);
        ListItem p3 = new ListItem("老海",R.drawable.img03,"我刚刚出去了。");
        items.add(p3);
        ListItem p4 = new ListItem("王语嫣",R.drawable.img04,"拜拜");
        items.add(p4);
        ListItem p5 = new ListItem("衾罗因",R.drawable.img05,"晚安");
        items.add(p5);
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_42927264/article/details/88680209