Android ListView (多个adapter 说明)

最近维护项目,项目里面使用的都是ListView 这里也对ListView 回顾一下

以下 demo 地址

ListView 在Android 里面用来实现列表的,

在xml 中创建ListView 代码如下

<?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"
        android:orientation="vertical">

    <ListView
            android:id="@+id/listView"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

</LinearLayout>

实现list 换需要适配器(Adapter) ,ListView常用的适配器(Adapter)有以下几种。

1  ArrayAdapter 绑定数组

2  SimpleAdapter 绑定xml 中对应的数据

3  SimpleCursorAdapter 绑定游标

4  BaseAdapter 通用的是适配器,(一般都是自定义)

1  ArrayAdapter 绑定数组

下面写一个demo

xml 使用上面的

java 代码如下

public class ArrayAdapterActivity extends AppCompatActivity {
    private String[] data = {"Android", "Java", "C++", "PHP", "Python", "JS", "HTML", "CSS"};
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.array_adapter_activity_layout);
        final ListView listView = findViewById(R.id.listView);
        final ArrayAdapter<String>
                adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1,
                data);
        listView.setAdapter(adapter);

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Toast.makeText(ArrayAdapterActivity.this, adapter.getItem(position),
                        Toast.LENGTH_SHORT).show();
            }
        });

    }
}

实现效果

没有分割线,设置一下

        // 设置分割线
        listView.setDivider(new ColorDrawable(Color.RED));
        // 设置分割线的宽度
        listView.setDividerHeight(5);

设置之后的效果'

'

2 SimpleAdapter

java 代码如下

public class SimpleAdapterActivity extends AppCompatActivity {

    private String[] project = {"Android", "Java", "C++", "PHP", "Python", "JS", "HTML", "CSS"};
    private String[] dev = {"张三", "李四", "王二", "小赵", "小钱", "小孙", "小李", "小明"};

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

        ArrayList<Map<String, Object>> mData = new ArrayList<>();
        int lengh = project.length;
        for (int i = 0; i < lengh; i++) {
            Map<String, Object> item = new HashMap<>();
            item.put("project", project[i]);
            item.put("dev", dev[i]);
            mData.add(item);
        }

        ListView listView = findViewById(R.id.list);

        SimpleAdapter adapter = new SimpleAdapter(this, mData, android.R.layout.simple_list_item_2,
                new String[] {"project", "dev"},
                new int[] {android.R.id.text1, android.R.id.text2});
        // 设置分割线
        listView.setDivider(new ColorDrawable(Color.RED));
        // 设置分割线的宽度
        listView.setDividerHeight(5);
        listView.setAdapter(adapter);
    }
}

实现的效果如下

从上面的代码可以看到adapter 加载item layout 使用的是同,其实我们可以自己写layout ,下面写一个横线的layout

layout 代码如下

<?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="80dp"
        android:orientation="horizontal">

    <TextView
            android:id="@+id/simple_id"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_gravity="center"
            android:textColor="@android:color/holo_blue_light"
            android:gravity="center" />

    <TextView
            android:id="@+id/simple_name"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_gravity="center"
            android:layout_marginLeft="50dp"
            android:textColor="@android:color/holo_blue_light"
            android:gravity="center" />

    <TextView
            android:id="@+id/simple_sex"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_gravity="center"
            android:textSize="20sp"
            android:textColor="@android:color/holo_red_dark"
            android:layout_marginLeft="100dp"
            android:gravity="center" />

    <TextView
            android:id="@+id/simple_class"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_gravity="center"
            android:textSize="28sp"
            android:textColor="@android:color/holo_purple"
            android:layout_marginLeft="100dp"
            android:gravity="center" />

</LinearLayout>

java 代码如下

public class SingleSimpleAdapterActivity extends AppCompatActivity {

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

        List<Map<String, Object>> mData = new ArrayList<>();
        Map<String, Object> map1 = new HashMap<>();
        map1.put("name", "张三");
        map1.put("sex", "男");
        map1.put("class", "一年级");

        Map<String, Object> map2 = new HashMap<>();
        map2.put("name", "李四");
        map2.put("sex", "男");
        map2.put("class", "二年级");

        Map<String, Object> map3 = new HashMap<>();
        map3.put("name", "王二");
        map3.put("sex", "男");
        map3.put("class", "三年级");

        Map<String, Object> map4 = new HashMap<>();
        map4.put("name", "春花");
        map4.put("sex", "女");
        map4.put("class", "一年级");

        Map<String, Object> map5 = new HashMap<>();
        map5.put("name", "夏草");
        map5.put("sex", "女");
        map5.put("class", "二年级");

        Map<String, Object> map6 = new HashMap<>();
        map6.put("name", "秋香");
        map6.put("sex", "女");
        map6.put("class", "三年级");

        mData.add(map1);
        mData.add(map2);
        mData.add(map3);
        mData.add(map4);
        mData.add(map5);
        mData.add(map6);

        ListView listView = findViewById(R.id.list);
        SimpleAdapter adapter = new SimpleAdapter(this, mData, R.layout.single_simple_adapter_item
                , new String[] {"name", "sex", "class"},
                new int[] {R.id.simple_name, R.id.simple_sex, R.id.simple_class});
        // 设置分割线
        listView.setDivider(new ColorDrawable(Color.RED));
        // 设置分割线的宽度
        listView.setDividerHeight(5);
        listView.setAdapter(adapter);

    }
}

实现的效果图

3  SimpleCursorAdapter 的主要代码如下

public class SimpleCursorActivity extends AppCompatActivity {

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

        String[] simpleCursor = new String[] {"_id", "name", "sex", "class"};
        MatrixCursor cursor = new MatrixCursor(simpleCursor);
        cursor.addRow(new Object[] {null,"张三", "男", "一年级"});
        cursor.addRow(new Object[] {null,"李四", "男", "二年级"});
        cursor.addRow(new Object[] {null,"王二", "男", "三年级"});
        cursor.addRow(new Object[] {null,"春花", "女", "一年级"});
        cursor.addRow(new Object[] {null,"夏草", "女", "二年级"});
        cursor.addRow(new Object[] {null,"秋香", "女", "三年级"});

        ListView listView = findViewById(R.id.list);
        SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
                R.layout.single_simple_adapter_item, cursor, simpleCursor,
                new int[] {R.id.simple_id,R.id.simple_name, R.id.simple_sex, R.id.simple_class});
        // 设置分割线
        listView.setDivider(new ColorDrawable(Color.RED));
        // 设置分割线的宽度
        listView.setDividerHeight(5);
        listView.setAdapter(adapter);
    }
}

实现的效果图

4  BaseAdapter 通用的是适配器,(一般都是自定义)

定义一个myAdapter

public class MyAdapter extends BaseAdapter {
    private List<ListBean> mDatas = null;
    private Context mContext = null;

    public MyAdapter(Context context, List<ListBean> datas) {
        mDatas = datas;
        mContext = context;
    }

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

    @Override
    public Object getItem(int position) {
        return mDatas.get(position);
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if (convertView == null) {
            holder = new ViewHolder();
            convertView = LayoutInflater.from(mContext).inflate(R.layout.list_base_item, null);
            holder.image = convertView.findViewById(R.id.image);
            holder.title = convertView.findViewById(R.id.title);
            holder.content = convertView.findViewById(R.id.content);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        holder.image.setImageResource(mDatas.get(position).getImgId());
        holder.title.setText(mDatas.get(position).getTitle());
        holder.content.setText(mDatas.get(position).getContent());

        return convertView;

    }

    public final class ViewHolder {
        public ImageView image;
        public TextView title;
        public TextView content;
    }

}

布局 list_base_item 

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

    <ImageView
            android:id="@+id/image"
            android:layout_width="120dp"
            android:layout_height="match_parent"
            android:src="@color/colorAccent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintBottom_toBottomOf="parent" />


    <TextView
            android:id="@+id/title"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:text="标题头"
            app:layout_constraintLeft_toRightOf="@+id/image"
            app:layout_constraintTop_toTopOf="parent"
            android:layout_marginLeft="50dp" />


    <TextView
            android:id="@+id/content"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:text="标题头"
            app:layout_constraintLeft_toRightOf="@+id/image"
            app:layout_constraintTop_toBottomOf="@+id/title"
            android:layout_marginTop="50dp"
            android:layout_marginLeft="50dp" />
</androidx.constraintlayout.widget.ConstraintLayout>

 activity 代码如下

public class ListBaseAdapterActivity extends AppCompatActivity {

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

        List<ListBean> list = new ArrayList<>();
        for (int i = 0; i < 20; i++) {
            ListBean listBean = new ListBean(R.mipmap.one, "标题头", "内容内容");
            list.add(listBean);
        }

        ListView listView = findViewById(R.id.list);
        MyAdapter adapter = new MyAdapter(ListBaseAdapterActivity.this, list);
        // 设置分割线
        listView.setDivider(new ColorDrawable(Color.RED));
        // 设置分割线的宽度
        listView.setDividerHeight(5);
        listView.setAdapter(adapter);
    }
}

实现的效果图

代码都狠简单就不多啰嗦了,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值