Android 自定义类中的Snackbar未显示

Android 自定义类中的Snackbar未显示,android,android-recyclerview,snackbar,Android,Android Recyclerview,Snackbar,MyActivity coord.xml: <CoordinatorLayout> id:coordID <RelativeL> ... <FAB> 这是一种在自定义类(RVAdapter.java)中通过滑动从回收器视图列表中删除项目的方法,删除后,应显示Snackbar并设置撤消操作。但是,当我删除一个项目时,什么都没有发生。Snackbar没有出现。我不太确定我是否正确设置了视图,但我不知道如何以不同的方式进行设置在我看来

MyActivity coord.xml:

<CoordinatorLayout>
   id:coordID
   <RelativeL>
      ...
   <FAB>

这是一种在自定义类(RVAdapter.java)中通过滑动从回收器视图列表中删除项目的方法,删除后,应显示Snackbar并设置撤消操作。但是,当我删除一个项目时,什么都没有发生。Snackbar没有出现。我不太确定我是否正确设置了视图,但我不知道如何以不同的方式进行设置

在我看来,我认为不显示snackbar可能有两个原因

  • 其他视图的标高太高,无法显示snackbar。检查活动中所有视图的立面
  • 作为Snackbar.make()的参数视图提供的活动引用可能不正确。如果是这种情况,那么我建议您通过构造函数将活动引用传递给适配器,然后按如下方式存储它

    public class MoviesAdapter extends RecyclerView.Adapter<MyViewHolder> {
    
        private List<Movie> moviesList;
        private MainActivity activity;
    
        MoviesAdapter(MainActivity activity){
            super();
            this.activity = activity;
        }
    
        //continue your remaining work from here
    
    }
    
    公共类MoviesAdapter扩展了RecyclerView.Adapter{ 私人名单电影名单; 私人活动; MoviesAdapter(主活动){ 超级(); 这个。活动=活动; } //从这里继续您剩余的工作 }

  • 我本想发表评论并询问更多细节,但由于我的名声不好,我不被允许这样做。希望这些建议对你有用。

    谢谢Mike M。我这样解决它:
    在MyActivity中添加

    private static CoordinatorLayout mCoord;
    mCoord = findViewById(R.id.coordID);
    public static View getCoord() { return mCoord; }
    
    在RVAdapter.java中

    ...
    @Override
        public void onItemDismiss(int position) {
            ...
            notifyItemRemoved(position);
    
            LayoutInflater inflater = (LayoutInflater) MyActivity.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View v = inflater.inflate(R.layout.coord, null);
    
            Snackbar.make(v.findViewById(R.id.coordID), "TEXT", Snackbar.LENGTH_LONG).show();
        }
    
    Snackbar.make(MyActivity.getCoord(), ...
    

    使用这个Snackbar.make(v,“TEXT”,Snackbar.LENGTH_LONG.show();
    View v
    您现在充气,屏幕上没有任何东西,因此
    Snackbar
    找不到合适的
    视图。您需要将
    活动
    层次结构中的一些
    视图
    传递给它。它可以是任何东西,真的;e、 例如,
    RecyclerView
    Snackbar
    将向上搜索,以找到
    坐标布局
    本身。@MikeM。Im I未通过视图v=充气机。。。???该方法中有第二个和第三个参数,但对于第二个,我需要一个视图组,我不知道从哪里获取它?不,我是说
    LayoutInflater
    View v
    没有用,因为它从未连接到
    活动。去掉这些,并传递
    Snackbar.make()
    一些已经在
    活动中的
    视图
    。我只是建议使用
    RecyclerView
    ,因为这是唯一的
    视图,我相信您已经使用了。1。情况并非如此。我试过了,然后我使用了
    Snackbar.make(activity.findViewById(R.id.coordID),…
    ,我收到了一个错误,我试图读取空对象引用上的字段
    activity.findViewById(R.id.coordID)
    !?