更强大的滚动控件 | 您所在的位置:网站首页 › 水平滚动条的长度 › 更强大的滚动控件 |
1、RecyclerView的基本用法
ListView做不到横向滚动,因此使用一个更强大的滚动控件——RecyclerView。 1)在activity_xml里添加RecyclerView控件。 2)准备好Fruit类 public class Fruit { private String name; private int imageid; public Fruit(String name, int imageid){ this.name=name; this.imageid=imageid; } public String getName(){ return name; } public int getImageid(){ return imageid; } }准备好列表的布局 最后在资源里准备图片。 3)由于RecyclerView可以上下或者左右滚动数据的,因此每滚动一次,view里面所现实的数据都会不一样,因此就需要适配器来决定该现实什么数据。需要把继承RecyclerView的适配器模版(RecyclerView.Adapter),并重写其三个方法抽象方法。 public class FruitAdapter extends RecyclerView.Adapter { private List mFruitList; //把要展示的数据源传进来,并赋值给一个全局变量mFruitList public FruitAdapter(List fruitList){ mFruitList=fruitList; } @NonNull @Override //该方法用于创建ViewHolder实例,我们在这个方法中将fruit_item布局加载出来,然后创建一个viewHolder实例, //并把加载出来的布局传入到适配器构造函数中,最后将实例返回。 public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.fruit_item,parent,false); ViewHolder viewHolder=new ViewHolder(view); return viewHolder; } //这个方法是对RecyclerView子项的数据进行赋值,当每个子项滚动到屏幕内时执行 @Override public void onBindViewHolder(@NonNull ViewHolder holder, int position) { //通过position参数得到当前项的实例,然后将数据设置到ViewHolder的imageview和TextView中 Fruit fruit=mFruitList.get(position); holder.fruitImage.setImageResource(fruit.getImageid()); holder.fruitName.setText(fruit.getName()); } //记录有多少个子项 @Override public int getItemCount() { return mFruitList.size(); } static class ViewHolder extends RecyclerView.ViewHolder{ ImageView fruitImage; TextView fruitName; //获取布局中的ImageView和TextView public ViewHolder(View view){ super(view); fruitName=(TextView) view.findViewById(R.id.fruit_name); fruitImage=(ImageView)view.findViewById(R.id.fruit_image); } } }3)适配器准备好后,可以开始使用Recyclerview了,修改mainactivity中的代码。 initFruits();//初始化水果 //在onCreate方法中获取实例,然后创建一个LinearLayoutManager对象(用于指定recyclerview的布局方式),// // 将他设置到RecyclerView中。 RecyclerView recyclerView=findViewById(R.id.recycler_view); LinearLayoutManager linearLayoutManager=new LinearLayoutManager(this); recyclerView.setLayoutManager(linearLayoutManager); //创建FruitAdapter的实例,将水果的数据传入到FruitAdapter的构造函数中,最后调用setAdapter方法来完成适配设置 FruitAdapter adapter=new FruitAdapter(fruitList); recyclerView.setAdapter(adapter);1)首先在fruit布局里把元素的方向改为垂直排列,这样实现横向的滚动。将宽度设置成固定值,是因为水果的名字长度不一样。最后在mainactivity里添加linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL); ListView可以直接用setOnItemClickListener(),但是没法具体到控件里具体的某一个按钮,因此Recyclerview直接用具体的View来实现点击事件。在Recyclerview中注册点击事件,修改FruitAdapter代码。 1)先在ViewHolder里用一个变量保存最外层的子项,然后在OnCreateViewHolder里注册点击事件。 static class ViewHolder extends RecyclerView.ViewHolder{ //用一个变量保存子项最外层布局的实例 View fruitView; ImageView fruitImage; TextView fruitName; //获取布局中的ImageView和TextView public ViewHolder(View view){ super(view); fruitView=view; fruitName=(TextView) view.findViewById(R.id.fruit_name); fruitImage=(ImageView)view.findViewById(R.id.fruit_image); } }2)对图片和文字分别设置点击事件 final ViewHolder viewHolder=new ViewHolder(view); viewHolder.fruitView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { int position= viewHolder.getAdapterPosition(); Fruit fruit=mFruitList.get(position); Toast.makeText(v.getContext(),"you click view"+fruit.getName(),Toast.LENGTH_SHORT).show(); } }); |
CopyRight 2018-2019 实验室设备网 版权所有 |