Android入门之Adapter初识

    科技2022-07-10  125

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

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

    ArrayAdapter 适合并且也只能显示单个文本条目,用法: List<String> str = new ArrayList<>(); .... //填数据 //参数分别为上下文,单项布局,数据源。 ArrayAdapter adapter = new ArrayAdapter<String>(this, R.layout.list_item, str); //为listview设置adapter listView.set(adapter); 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); 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);

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

    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就可以几乎满足大部分的需求了。

    Processed: 0.010, SQL: 8