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);
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章