Android--RecyclerView的使用

首先第一步我们要使用RecyclerView就得导包
在这里插入图片描述
千万不能导错

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

然后就是界面的java代码:

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private RecyclerView recyclerView;
    private List<UserBean> data;
    private ListViewAdapter adapter;
    private Button btn_list,btn_stagger,btn_grid;
    private Button btn_addData,btn_deleteData;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
		//初始化
        btn_grid=(Button)findViewById(R.id.btn_grid);
        btn_list=(Button)findViewById(R.id.btn_list);
        btn_stagger=(Button)findViewById(R.id.btn_stagger);
        btn_addData=(Button)findViewById(R.id.addData);
        btn_deleteData=(Button)findViewById(R.id.deleteData);

		//设置点击功能
        btn_list.setOnClickListener(this);
        btn_grid.setOnClickListener(this);
        btn_stagger.setOnClickListener(this);
        btn_addData.setOnClickListener(this);
        btn_deleteData.setOnClickListener(this);
		
		//为集合填充数据
        recyclerView=(RecyclerView)findViewById(R.id.recycler_main);
        data=new ArrayList<UserBean>();
        inData();
		
		//初始化适配器
        adapter=new ListViewAdapter(MainActivity.this,data);
		
		//设置适配器
        recyclerView.setAdapter(adapter);
        //设置边界,就每一个条目之间都有竖直方向的边界,也就是下底的边界
        recyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));
		
		//设置监听。本身是没有这个方法。是自己在适配器内里面自己定义的
        adapter.setOnItemClickListener(new ListViewAdapter.OnItemClickListener() {
            @Override
            public void onItemClick(View view, UserBean data) {
                Toast.makeText(MainActivity.this, "data"+data.getData(), Toast.LENGTH_SHORT).show();
            }
        });

    }

    //为集合填充数据
    private void inData() {
        for(int i=0;i< Data.icons.length;i++){
            UserBean userBean=new UserBean();
            userBean.setImagePath(Data.icons[i]);
            userBean.setData("信息:"+i);
            data.add(userBean);
        }
    }




    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.btn_list:
                //我们平时用的是第二个构造方法:有三个参数的。
                //第一个参数是上下文,第二个是方向,第三个是倒叙还是正序。下面的自己理解
                recyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
                recyclerView.setAdapter(adapter);
                break;
            case R.id.btn_grid:
                recyclerView.setLayoutManager(new GridLayoutManager(this, 2, GridLayoutManager.HORIZONTAL, false));
                recyclerView.setAdapter(adapter);

                break;
            case R.id.btn_stagger:
                recyclerView.setLayoutManager(new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL));
                recyclerView.setAdapter(adapter);
                break;
            case R.id.addData:
                adapter.addData(0,new UserBean());
                //跟踪0号位置条目
                recyclerView.scrollToPosition(0);
                break;
            case R.id.deleteData:
                adapter.removeData(0);
                recyclerView.scrollToPosition(0);
                break;
        }
    }
}


设配器代码:

public class ListViewAdapter extends RecyclerView.Adapter<ListViewAdapter.MyViewHodler> {


    private List<UserBean> data;
    private Context context;

	//构造函数,将activity和数据传过来
    public ListViewAdapter(Context context, List<UserBean> list) {
        this.context=context;
        this.data=list;
    }


    /**
     *  相当于getView方法中创建View和VIewHolder
     * @param parent
     * @param viewType
     * @return
     */
    @NonNull
    @Override
    public ListViewAdapter.MyViewHodler onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view=View.inflate(context, R.layout.item_list, null);
        return new MyViewHodler(view);
    }

    /**相当于getView绑定数据部分的代码
     * 数据和View绑定
     * @param holder
     * @param position
     */
    @Override
    public void onBindViewHolder(@NonNull ListViewAdapter.MyViewHodler holder, int position) {
        //绑定数据之前,是要根据位置得到对应的数据
        UserBean userBean = data.get(position);
        //设置标题
        String data = userBean.getData();
        holder.tv_item.setText(data);
        //设置图片路径且设置图片。
        int imagePath = userBean.getImagePath();
        holder.iv_item.setImageResource(imagePath);
    }

    /**
     * 得到总条数
     * @return
     */
    @Override
    public int getItemCount() {
        return data.size();
    }

	//添加数据
    public void addData(int position, UserBean userBean) {
        userBean.setImagePath(R.drawable.ic_launcher_foreground);
        userBean.setData("信息"+data.size());
        data.add(position,userBean);
        //刷新设配器
        notifyItemInserted(position);
    }

	//删除条目
    public void removeData(int position) {
        data.remove(position);
        //刷新适配器
        notifyItemRemoved(position);
    }


	
    public class MyViewHodler extends RecyclerView.ViewHolder {
        private ImageView iv_item;
        private TextView tv_item;

        public MyViewHodler(@NonNull View itemView) {
            super(itemView);
            iv_item=itemView.findViewById(R.id.iv_item);
            tv_item=itemView.findViewById(R.id.tv_item);


            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                	//判断是否调用这个方法
                    if(onItemClickListener!=null){
                        onItemClickListener.onItemClick(v, data.get(getLayoutPosition()));
                    }
                }
            });

        }
    }
		//----------定义点击监听接口----------------//
    /**
     * 当RecyclerView某个被点击的时候回调
     * view:点击item的视图
     * data:点击得到的数据
     */
    public interface OnItemClickListener{
        void onItemClick(View view , UserBean data);
    }

    private OnItemClickListener onItemClickListener;

    //设置RecyclerView某条的监听
    public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
        this.onItemClickListener = onItemClickListener;
    }
}

这里自定义接口的理解:也就是说:当我们在要设置监听时,首先调用的是set…方法,里面就需要传递个参数,也就是接口的。所以在调用set时,监听接口就不为null了。所以在我们点击某个条目时,就可以传递真实的参数过去。(太难讲述了,也太难理解了,简单来说就是interface是一个回调接口)

原创文章 158 获赞 2 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_43616001/article/details/104602864