AndroidStudio RecycleView实现UI界面控件滚动

大家使用手机App在浏览内部页面的时候总是会滑动屏幕即滚动页面上显示的内容,这就是数据流的滚动。

那么,这次我们就来学习Android开发中实现控件滚动的RecycleView吧。这是数据流滚动的基础,这一期我做了一个菜品图片的纵向滚动。

一、添加RecycleView控件的依赖

 1、找到并点击Activity_main.xml文件

0af525cd7f954e49bfd2d45175238dea.png

 2、点击Design页面

33d4e46c6408439093590dd37e8f3fa3.png

3、选择Palette中Common的RecycleView,右键选择Add to Design即可新建RecycleView控件,这样在Activity_main.xml和build.gradle中就会自动添加RecycleView的相关依赖。 

0689fe3b092743a8a2d977f62ef072bc.png 4、点击build.gradle页面右上角的Sync Now进行同步构建gradle。

0acd72e729854c5e9f151a3d09730268.png

二、设计控件RecycleView

由于第一步我们已经完成了自动添加RecycleView,所以这里我们只需要在activity_main.xml文件中 为RecycleView附上Id即可,完整代码如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

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

 三、定义实体类Food

一个.java文件中只能存在一个Public  class。

1、此处在com.example.recycleview下新建java class,选择com.example.recycleview右键New-Java Class,然后命名,这里我命名为Food(因为这次做的是菜品滚动)

18d1e698fa33431293eb3d518fe5f732.png 

 1782d2612a1f4b99891eb98f67d30724.png

2、加入想要滚动显示的图片,放入drawable文件夹中

67d7ec388a0f4be680fabf2d4ddf01e1.png 

 2、在Food.java中编辑如下

public class Food {
        private String name;
        private int imageId;

        public Food(String name,int imageId){
            this.name=name;
            this.imageId=imageId;
        }
        public String getName(){
            return name;
        }
        public int getImageId(){
            return imageId;
        }
}

四、菜品图片和名称的显示 

新建布局item_food.xml,采用ImageView显示菜品图片,TextView显示菜品名称,具体代码如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <ImageView
        android:id="@+id/img"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
    <TextView
        android:id="@+id/tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:layout_marginLeft="10dp"/>

</LinearLayout>

五、定义适配器FoodAdapter

适配器FoodAdapter基础RecycleView.Adapter,并指定泛型FoodAdapter.ViewHolder,ViewHolder是FoodAdapter的一个内部类,继承了FoodAdapter.ViewHolder类,在内部定义了一个方法传入View参数,该参数就是RecycleView子项的最外层布局,这样就可以用findViewById()方法获取布局中的ImageView和TextView实例。(有点拗口,慢慢体会哈哈哈)

同样也是新建FoodAdapter.java类文件 

编辑代码如下:

public class FoodAdapter extends RecyclerView.Adapter<FoodAdapter.ViewHolder> {
    private List<Food> foodList;
    static class ViewHolder extends RecyclerView.ViewHolder{
        ImageView foodImg;
        TextView foodName;
        public ViewHolder(@NonNull View itemView){
            super(itemView);
            foodImg=itemView.findViewById(R.id.img);
            foodName=itemView.findViewById(R.id.tv);
        }
    }
    public FoodAdapter(List<Food>foodList){
        this.foodList=foodList;
    }
    @Override
    public ViewHolder onCreateViewHolder(@NonNull final ViewGroup viewGroup, int i){
        View view= LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_food,viewGroup,false);
        ViewHolder holder=new ViewHolder(view);
        return holder;
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) {
        Food food=foodList.get(i);
        viewHolder.foodImg.setImageResource(food.getImageId());
        viewHolder.foodName.setText(food.getName());
    }
    
    @Override
    public int getItemCount(){
        return foodList.size();
    }
}

六、应用RecycleView

我们在MainActivity中应用RecycleView

public class MainActivity extends AppCompatActivity {

    private  List<Food>foodList=new ArrayList<>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initFood();
        initView();
    }
    private void initFood(){
        for(int i=0;i<3;i++){
            Food chicken=new Food("chicken",R.drawable.chicken);
            foodList.add(chicken);
            Food egg=new Food("egg",R.drawable.egg);
            foodList.add(egg);
            Food huoguo=new Food("huoguo",R.drawable.huoguo);
            foodList.add(huoguo);
            Food xia=new Food("xia",R.drawable.xia);
            foodList.add(xia);
            Food noodles=new Food("noodles",R.drawable.noodles);
            foodList.add(noodles);
        }
    }
    private void initView(){
        RecyclerView recyclerView=findViewById(R.id.recyclerView);
        LinearLayoutManager layoutManager=new LinearLayoutManager(this);
        recyclerView.setLayoutManager(layoutManager);
        FoodAdapter adapter=new FoodAdapter(foodList);
        recyclerView.setAdapter(adapter);
    }
}

七、运行结果展示

页面可以通过鼠标滚动,动图不便展示(大家可以自行尝试哦) 

91a24071e38242358ad7ee92df860386.png

 

Android Studio 的 View Binding 是一种轻量级的视图绑定技术,它允许我们在运行时直接操作布局文件中的 UI 控件,而无需在 Activity 或 Fragment 中手动通过 findViewById() 查找控件。当涉及到 RecyclerView 的时候,View Binding 可以简化数据绑定的过程。 要在 Android Studio 中使用 View Binding 和 RecyclerView 结合,首先需要做以下步骤: 1. **创建绑定类**:对于每个包含 RecyclerView 的布局,生成对应的 Binding 类。打开你的 layout 文件右键点击,选择 "Generate" -> "Data Binding Class"。 2. **设置数据源**:在 ViewModel 或者 Repository 中管理数据列表,并将其传递给 Adapter。 3. **Adapter 实现**:在 Adapter 中,将 Binding 类作为参数传入构造函数,并在 onCreateViewHolder 和 onBindViewHolder 方法中初始化和更新 View。 ```java public class YourRecyclerViewAdapter extends RecyclerView.Adapter<YourRecyclerViewAdapter.ViewHolder> { private final YourViewModel viewModel; private final YourBinding binding; public YourRecyclerViewAdapter(YourViewModel viewModel) { this.viewModel = viewModel; binding = YourBinding.inflate(LayoutInflater.from(context), parent, false); } @NonNull @Override public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { return new ViewHolder(binding.getRoot()); } @Override public void onBindViewHolder(@NonNull ViewHolder holder, int position) { YourItem item = viewModel.getItems().get(position); // 假设你的 ViewModel 返回 List<YourItem> binding.setVariable(BR.item, item); holder.itemView.setOnClickListener(new View.OnClickListener() { ... }); holder.binding.getRoot().executePendingBindings(); // 刷新视图 } @Override public int getItemCount() { return viewModel.getItems().size(); } class ViewHolder extends RecyclerView.ViewHolder { public ViewHolder(@NonNull View itemView) { super(itemView); } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值