微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

基于Android的RecyclerView的使用

  1. activity_main.xml中引入RecyclerView布局
<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/root_layout"
        android:orientation="vertical">

        <androidx.recyclerview.widget.RecyclerView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/recycler_view"/>

    </LinearLayout>

注意:要把RecyclerView完整的包路径写出来,因为RecyclerView不是内置内置在SDK当中的。

  1. 定义一个实体类,作为RecyclerView适配器的适配类型
public class Bean {
    public String name;
    public int imageID;

    public Bean(String name, int imageID) {
        this.name =name;
        this.imageID =imageID ;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getimageID () {
        return imageID ;
    }

    public void setimageID (int imageID) {
        this.imageID =imageID;
    }
}
  1. 给适配器创建一个布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="5dp"
    android:layout_marginBottom="5dp"
    android:layout_marginLeft="5dp"
    android:layout_marginRight="5dp">


    <ImageView
        android:layout_width="75dp"
        android:layout_height="75dp"
        android:id="@+id/item_image"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/item_name"
        android:gravity="center_vertical"/>

</LinearLayout>
  1. 创建适配器,让这个适配器继承自RecyclerView.Adapter ,并将泛型指定为MyAdapter.ViewHolder。其中ViewHolder是我们在MyAdapter中定义的一个内部类。
public class MyAdapter extends RecyclerView.Adapter <MyAdapter.ViewHolder> {
    private List <Bean> mBean;

    public MyAdapter(List <Bean> mBean ) {
        super();
        this.mBean = mBean;
    }

    static class ViewHolder extends RecyclerView.ViewHolder {
        TextView textView;
        ImageView imageView;

        public ViewHolder(View view) {
            super(view);
            textView = (TextView) view.findViewById(R.id.item_name);
            imageView = (ImageView) view.findViewById(R.id.item_image);

        }
    }


    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_bean,parent ,false);

        final ViewHolder holder = new ViewHolder(view);

        holder.textView.setonClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(v.getContext(),"textview",Toast.LENGTH_SHORT).show();

            }
        });

        holder.imageView.setonClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(v.getContext(),"imageview",Toast.LENGTH_SHORT).show();

            }
        });

        return holder;
    }


    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        Bean bean = mBean.get(position);
        holder.textView.setText(bean.getName());
        holder.imageView.setBackgroundResource(bean.getimageID());

    }


    @Override
    public int getItemCount() {
        return mBean.size();
    }
}

ViewHolder的构造函数中要传入一个人参数View,这个参数通常就是RecyclerView子项的最外层布局,那么我们就可以通过findViewById()方法获取到布局中的ImageViewTextView的实例了。

由于MyAdapter 是继承自RecyclerView.Adapter 的,那么就必须重写onCreateViewHolder() 、onBindViewHolder() 和getItemCount() 这3个方法

onCreateViewHolder() 方法是用于创建ViewHolder 实例的,我们在这方法中将adapter_item 布局加载进来,然后创建一个ViewHolder 实例,并把加载出来的布局传入到构造函数当中,最后将ViewHolder 的实例返回。

onBindViewHolder() 方法是用于对RecyclerView子项的数据进行赋值的,会在每个子项被滚动到屏幕内的时候执行,这里我们通过position 参数得到当前项的实例,然后再将数据设置到ViewHolderImageViewTextView当中即可。

getItemCount() 方法就非常简单了,它用于告诉RecyclerView一共有多少子项,直接返回数据源的长度就可以了。

  1. 最后编写MainActivity中的代码
public class MainActivity extends AppCompatActivity {
    RecyclerView recyclerView;
    private List <Bean> mBean = new ArrayList<Bean>();

    private void initData(){
        Bean bean1 = new Bean("App_1",R.drawable.ic_launcher_background);
        mBean.add(bean1);
        Bean bean2 = new Bean("App_2",R.drawable.ic_launcher_background);
        mBean.add(bean2);
        Bean bean3 = new Bean("App_3",R.drawable.ic_launcher_background);
        mBean.add(bean3);
        Bean bean4 = new Bean("App_4",R.drawable.ic_launcher_background);
        mBean.add(bean4);
        Bean bean5 = new Bean("App_5",R.drawable.ic_launcher_background);
        mBean.add(bean5);
        Bean bean6 = new Bean("App_6",R.drawable.ic_launcher_background);
        mBean.add(bean6);
        Bean bean7 = new Bean("App_7",R.drawable.ic_launcher_background);
        mBean.add(bean7);
        Bean bean8 = new Bean("App_8",R.drawable.ic_launcher_background);
        mBean.add(bean8);
        Bean bean9 = new Bean("App_9",R.drawable.ic_launcher_background);
        mBean.add(bean9);
    }

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

        initData();

        ActionBar actionBar = getSupportActionBar();
        if(actionBar != null) {
            actionBar.setHomeButtonEnabled(true);
            actionBar.setdisplayHomeAsUpEnabled(true);
        }

        recyclerView = (RecyclerView) findViewById(R.id.recycler_view);

        linearlayoutmanager linearlayoutmanager = new linearlayoutmanager(this);
        linearlayoutmanager.setorientation(linearlayoutmanager.HORIZONTAL);
        recyclerView.setLayoutManager(linearlayoutmanager);
        MyAdapter myAdapter = new MyAdapter(mBean);
        recyclerView.setAdapter(myAdapter);
    }


    @Override
    public boolean onoptionsItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home :
               // Intent backIntent = new Intent(Login.this,MainActivity.class);
               // startActivity(backIntent);
                finish();
                break;
        }
        return super.onoptionsItemSelected(item);
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐