Android入门之Adapter初识

Adapter作为安卓中数据显示和布局的重要组件,好好理解很重要。

下面是它的继承关系。
Adapter简介
下面介绍几个比较常用的Adapter。

  1. ArrayAdapter
    适合并且也只能显示单个文本条目,用法:
List<String> str = new ArrayList<>();
....
//填数据
//参数分别为上下文,单项布局,数据源。
ArrayAdapter adapter = new ArrayAdapter<String>(this, R.layout.list_item, str);
//为listview设置adapter
listView.set(adapter);
  1. SimpleAdapter
    Simple使用起来更加简单,但是,它可以为每一项设置多个参数,包括图片和文本。用法:
String[] images = new String[]{......};
String[] title = new String[]{"八重樱,永存于时间裂缝。---《崩坏三》", "加藤惠,路人女主结束了,她依旧如此。---《路人女主的养成方式》",
                "椎名真白,如果喜欢是有颜色的,那一定是樱花色。---《樱花庄的宠物女孩》", "呆毛王,虽已然逝去,人们依旧称她如青莲。---《Fate》",
                "渡边早季,在生物的进化过程中,没有能力的人被变为化鼠。---《新世界より》", "加藤惠,路人女主结束了,她依旧如此。---《路人女主的养成方式》"};
        List<Map<String, Object>> listItems = new ArrayList<Map<String, Object>>();
        for(int i=0;i<images.length/2;i++){
            Map<String, Object> map = new HashMap<String, Object>();
            map.put("image", images[2*i]);
            map.put("介绍", title[2*i]);
            map.put("image1", images[2*i+1]);
            map.put("介绍1", title[2*i + 1]);
            listItems.add(map);
        }
        //参数分别为上下文,数据源列表,布局列表,数据keys,单项数据显示项
        SimpleAdapter adapter = new SimpleAdapter(getActivity(), listItems, R.layout.recycle_view_row, new String[]{"image", "介绍",
                "image1", "介绍1"},
                new int[]{R.id.image01, R.id.text01, R.id.image02, R.id.text02});
        listView.setAdapter(adapter);
  1. BaseAdapter
    BaseAdapter比较灵活,由于是抽象类,需要对它进行重写。用法:
BaseAdapter baseAdapter = new BaseAdapter() {
            @Override
            public int getCount() {
                return images.length;
            }

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

            @Override
            public long getItemId(int position) {
                return position;
            }
            //在这里设置每一个单项的属性,positon就是每一个项的下标,类似数组的下标
            @SuppressLint("ViewHolder")
            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                LayoutInflater layoutInflater = LayoutInflater.from(getActivity());
                convertView = layoutInflater.inflate(R.layout.new_up_row, null);
                TextView textView = (TextView) convertView.findViewById(R.id.up_name);
                ImageView imageView = (ImageView) convertView.findViewById(R.id.up_image);
                textView.setText(names[position]);
                textView.setHeight(60);
                textView.setWidth(120);
                imageView.setImageResource(images[position]);
                imageView.setMaxHeight(120);
                imageView.setMaxWidth(120);
                imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
                return convertView;
            }
        };
        gridView.setAdapter(baseAdapter);

适合需要更加复杂操作的适配操作。

  1. RecyclerAdapter
    Android新推出的RecyclerView的适配器,RecycleAdapter。用法:
public class RecycleAdapter extends RecyclerView.Adapter<RecycleAdapter.MyViewHolder> {
    private String[] mData;
    //自定义holder
    public static class MyViewHolder extends RecyclerView.ViewHolder{
        public TextView textView;
        public ImageView imageView;
        public TextView textView1;
        public ImageView imageView1;
        public MyViewHolder(View view){
            super(view);
            textView  = view.findViewById(R.id.text01);
//            imageView = view.findViewById(R.id.image01);
//            textView1  = view.findViewById(R.id.text02);
//            imageView1 = view.findViewById(R.id.image02);
        }
    }
    public RecycleAdapter(String[] mData){
        this.mData = mData;
    }

    @NonNull
    @Override
    public RecycleAdapter.MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recycle_view_row, parent, false);
        MyViewHolder vh = new MyViewHolder(view);
        return vh;
    }

    @Override
    public void onBindViewHolder(@NonNull RecycleAdapter.MyViewHolder holder, int position) {
        holder.textView.setText(mData[position]);
//        holder.textView1.setText("第二个");
    }

    @Override
    public int getItemCount() {
        return 0;
    }
}

总而言之,使用SimpleAdapter和BaseAdapter就可以几乎满足大部分的需求了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值