android开发之为listview绑定数据的三种方式

本文介绍了在Android开发中为ListView绑定数据的三种方式:使用SimpleAdapter、BaseAdapter和ArrayAdapter。详细讲解了每种方式的实现步骤,并提供了相关代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一种,使用simple adapter

simpleadapter 是最简单的一种方式,但是其数据源必须是map类型。

1.生成 SimpleAdapter()对象

2.设置数据源

3.设置每个item的布局

4.设置SimpleAdapter(Context context, //上下文

List<? extends Map<String, ?>> data, //数据源

int resource, //每个item的布局

String[] from,//map的key

int[] to) //相应控件的id

5.为listview绑定SimpleAdapter

接下来看代码:

public class User {
    private String userName;
    private int userRank;

    public User(String userName, int userRank) {
        super();
        this.userName = userName;
        this.userRank = userRank;
    }
    public User(){
        super();
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public int getUserRank() {
        return userRank;
    }

    public void setUserRank(int userRank) {
        this.userRank = userRank;
    }
}

Actvity的代码:

public class RankingActivity extends Activity {
    //数据源
    ArrayList<User> al = new ArrayList<User>();
    private ListView ls_rank;
    List<Map<String, String>> data = new ArrayList<Map<String, String>>();

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

        ls_rank = (ListView) findViewById(R.id.ls_rank);
        al.add(new User("aaa", 666));
        al.add(new User("bbb", 777));
        al.add(new User("ccc", 888));
        fillData();
//        第一种 simpleAdapter
    SimpleAdapter adapter = new SimpleAdapter(RankingActivity.this,
                data,
                R.layout.rank_list_item,
                new String[]{"userName", "userRank"},
                new int[]{R.id.tv_name, R.id.tv_rank});
 ls_rank.setAdapter(adapter);
 private void fillData() {
        for (User user : al) {
            Map<String, String> map = new HashMap<String, String>();
            map.put("userName", user.getUserName());
            map.put("userRank", user.getUserRank() + "");
            data.add(map);
        }
    }

第二种:BaseAdapter

1.创建一个MyBaseAdapter,重写四个方法

 class MyBaseAdapter extends BaseAdapter {

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

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

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

        @Override
        public View getView(int i, View view, ViewGroup viewGroup) {
            View row = view;
            Wrapper wrapper;
            if (row == null) {
                row = getLayoutInflater().inflate(R.layout.rank_list_item, viewGroup, false);
                wrapper = new Wrapper(row);
                row.setTag(wrapper);
            } else {
                wrapper = (Wrapper) row.getTag();
            }

            TextView tvName = wrapper.gettvName();
            TextView tvRank = wrapper.gettvRank();
            tvName.setText(al.get(i).getUserName());
            tvRank.setText(al.get(i).getUserRank()+"");
            return row;
        }
    }

    class Wrapper {
        private TextView tvName;
        private TextView tvRank;
        private View row;

        public Wrapper(View row) {
            this.row = row;
        }

        public TextView gettvName() {
            if (tvName == null) {
                tvName = (TextView) row.findViewById(R.id.tv_name);
            }
            return tvName;

        }

        public TextView gettvRank() {
            if (tvRank == null) {
                tvRank = (TextView) row.findViewById(R.id.tv_rank);
            }
            return tvRank;
        }
    }
然后在onCreate里面绑定adapter就可以了

效果如上所示

三:ArrayAdapter,新建一个MyArrayAdapter 重写getView方法

   class MyArrayAdapter extends ArrayAdapter<User>{

        public MyArrayAdapter(@NonNull Context context, @LayoutRes int resource, @IdRes int textViewResourceId, @NonNull List objects) {
            super(context, 0, 0, objects);
        }


        @NonNull
        @Override
        public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
            View row = convertView;
            Wrapper wrapper;
            if (row == null) {
                row = getLayoutInflater().inflate(R.layout.rank_list_item, parent, false);
                wrapper = new Wrapper(row);
                row.setTag(wrapper);
            } else {
                wrapper = (Wrapper) row.getTag();
            }

            TextView tvName = wrapper.gettvName();
            TextView tvRank = wrapper.gettvRank();
            tvName.setText(al.get(position).getUserName());
            tvRank.setText(al.get(position).getUserRank()+"");
            return row;
        }


    }

效果如上所示

三种方法完成了




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值