安卓基础(十二)

来源:互联网 发布:用java编写的大型游戏 编辑:程序博客网 时间:2024/05/16 10:07

列表-适配器

  • 列表-适配器
    • 简介
    • 正文

目标人群:没有基础的安卓初学者
知识点:RecyclerView的使用
目标:用在页面中使用RecyclerView展示列表数据

简介

  • RecyclerView的适配器的相关说明

正文

1.在项目中创建一个名为ItemAdapter.java的类来作为RecyclerView的适配器,一个最基本的示例如下所示

public class ItemAdapter extends RecyclerView.Adapter<ItemAdapter.viewHolder> {    private ArrayList<String> infos = new ArrayList<String>();    public ItemAdapter(ArrayList<String> infos) {        this.infos = infos;    }    @Override    public viewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {         View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_card,                viewGroup, false);        return new viewHolder(view);    }    @Override    public void onBindViewHolder(viewHolder viewHolder, int position) {        String info = infos.get(position);        View view = viewHolder.itemView;        TextView textView = (TextView) view.findViewById(R.id.info_text);        textView.setText(info);    }    @Override    public int getItemCount() {        return infos.size();    }    class viewHolder extends RecyclerView.ViewHolder {        public viewHolder(View itemView) {            super(itemView);        }    }}
  • 该类继承自RecyclerView.Adapter,需要传入一个RecyclerView.ViewHolder的实现类来保证ViewHolder的实现,在本类中为内部类viewHolder

  • 至少需要实现三个方法,onCreateViewHolder(根据viewType参数创建对应的子view)、onBindViewHolder(将数据根据指定位置绑定到对应位置的viewHolder上)、getItemCount(RecyclerView的长度)

  • onCreateViewHolder可根据不同viewType参数返回不同布局格式的子View,但需重写该Adapter的getItemViewType(int position)方法来指定不同位置对应的viewType值

2.MainActivity.java中添加如下代码

 @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        RecyclerView mRecyclerView = (RecyclerView) findViewById(R.id.recyclerView);        // 当每个子View的大小在布局中不会发生变化时,可以调用本句来提升性能        mRecyclerView.setHasFixedSize(true);        // 为RecyclerView指定一个类型为LinearLayoutManager的layout manager        LinearLayoutManager mLayoutManager = new LinearLayoutManager(this);        mRecyclerView.setLayoutManager(mLayoutManager);        //创建一个临时数据源        ArrayList<String> infos = new ArrayList<String>();        for (int a = 0; a < 50; a++) {            infos.add("第" + (a + 1) + "行");        }        //创建一个适配器对象        ItemAdapter itemAdapter = new ItemAdapter(infos);        //为Recycleview指定一个适配器对象        mRecyclerView.setAdapter(itemAdapter);    }

3.为了RecyclerView的美观考虑,应为每个itemView添加一个行间距,最简单的方法为找到item_card.xml在android.support.v7.widget.CardView中添加一个新的属性(card_view:cardUseCompatPadding=”true”),代码如下

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:card_view="http://schemas.android.com/apk/res-auto"    android:layout_width="fill_parent"    android:layout_height="fill_parent">    <android.support.v7.widget.CardView        android:id="@+id/card_view"        android:layout_gravity="center"        android:layout_width="200dp"        android:layout_height="200dp"        card_view:cardUseCompatPadding="true"        card_view:cardCornerRadius="4dp">        <TextView            android:id="@+id/info_text"            android:layout_width="match_parent"            android:layout_height="match_parent" />    </android.support.v7.widget.CardView></LinearLayout>

4.重新Build你的项目并在模拟器上运行,如果可以看到一个纵向的列表,那么恭喜,本章完成。

0 0