更强大的滚动控件 您所在的位置:网站首页 水平滚动条的长度 更强大的滚动控件

更强大的滚动控件

2023-03-10 01:46| 来源: 网络整理| 查看: 265

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);

在这里插入图片描述

2、实现横向滚动和瀑布流

1)首先在fruit布局里把元素的方向改为垂直排列,这样实现横向的滚动。将宽度设置成固定值,是因为水果的名字长度不一样。最后在mainactivity里添加linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL); 在这里插入图片描述 2)修改fruit_item里的代码改为瀑布流布局。将LinearLayout的宽度改为match_parent,因为瀑布流的宽度由布局的列数来自动适配。还有就是把TextView里的对齐属性变为居左对齐。接着修改mainactivity里的代码。 首先在onCreate方法里创建一个StaggeredGridLayoutManager的实例。此实例的构造函数有两个参数一个是指定布局的列数,第二个是指定布局的排列方向。 在这里插入图片描述 3)为了更明显的瀑布效果,我们可以创建一个方法getRandomName(),用Random创建随机数,将参数中传入的字符串随机重复几遍,在initfruits()方法中把水果的名字改成调用getRandomLengthName()来生成。 在这里插入图片描述

3、创建点击事件

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 实验室设备网 版权所有