首页 > 解决方案 > 回收站视图中的小吃店

问题描述

如何在页面底部显示小吃栏?我想在点击喜欢时显示小吃栏。我在recycleview(crdLayout)的一个项目中使用了snackbar,所以它显示在每个项目的底部,这里是代码:

public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int position) {
            itemHolder.like.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar snackbar = Snackbar
                        .make(itemHolder.crdLayout, "liked", Snackbar.LENGTH_LONG)         
                                snackbar1.show();
            }
        });

小吃栏每次都不会在页面底部弹出,而是出现在每个卡片视图的底部

标签: javaandroidandroid-recyclerviewandroid-snackbar

解决方案


在您的Snackbar中,您将参数指定为itemholder.cardLayout。因此,小吃吧将出现在卡片布局下方。您应该提供页面的根视图以使其显示在页面底部

有两种方法可以实现这一目标。一种是rootview在类的构造函数中RecyclerViewAdapter传递 ,并将参数传递给Snackbar. Activity另一种方法是在您的或Fragment调用您的类的类中使用回调方法RecyclerViewAdapter

对于第一种方法,您只需将rootView页面的作为构造函数参数传递,并将参数传递给Snackbar.

对于第二种方法,可以在RecyclerViewAdapter类中创建接口,在构造函数中将接口实例作为参数传递,在接口中创建方法并在项目被点击时通知方法。然后你可以Snackbar在你的Activity课堂上展示。看下面的代码,

public class YourActivity implements RecyclerViewAdapter.CallbackListener{
     View rootView;
     @Override
     protected void onCreate(Bundle savedInstanceState){
        //
        rootView = findViewById(R.id.my_root_view);
        // 
        //
        RecyclerViewAdapter recyclerViewAdapter = new RecyclerViewAdapter(this);
        //
        //
     }

     @Override
     public void onItemClicked(){
         Snackbar snackbar = Snackbar.make(rootView, "liked", Snackbar.LENGTH_LONG);
         snackbar.show();             
     }
}

你的 RecyclerViewAdapter 类将是,

public class RecyclerViewAdapter {
    CallbackListener listener;
            
    public RecyclerViewAdapter (CallbackListener listener){
         this.listener = listener;
    }
        
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int position) {
         itemHolder.like.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
             listener.onItemClicked();
            }
     });
    
     public interface CallbackListener{
         void onItemClicked();
     }
}

虽然第一种方法很简单,但第二种方法给你更多的封装、更简洁的代码和对代码的更多控制。


推荐阅读