自定义类中的 Snackbar 未显示

Posted

技术标签:

【中文标题】自定义类中的 Snackbar 未显示【英文标题】:Snackbar from custom class not showing 【发布时间】:2018-12-02 18:55:39 【问题描述】:

我的活动 coord.xml:

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

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

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

【问题讨论】:

使用这个 Snackbar.make(v, "TEXT", Snackbar.LENGTH_LONG).show(); 那个View v 你在那儿膨胀并没有附加到屏幕上的任何东西,所以Snackbar 不会找到合适的View 来锚定。您需要将View 传递给它,它位于Activity 的层次结构中。它可以是任何东西,真的;例如,RecyclerViewSnackbar 将向上搜索以找到 CoordinatorLayout 本身。 @MikeM。我没有通过 View v = inflater 的视图...???该方法中有第二个和第三个参数,但对于第二个,我需要一个 ViewGroup,但我不知道从哪里得到它? 不,我是说LayoutInflaterView v 没有用,因为它从来没有附加到Activity。摆脱那些,并传递Snackbar.make() 一些View,它们已经在Activity 中。我只是建议RecyclerView,因为它是唯一的View,我相信你有。 【参考方案1】:

感谢 Mike M。我是这样解决的: 在 MyActivity 中添加了

private static CoordinatorLayout mCoord;
mCoord = findViewById(R.id.coordID);
public static View getCoord()  return mCoord; 

在 RVAdapter.java 中

Snackbar.make(MyActivity.getCoord(), ...

【讨论】:

【参考方案2】:

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

    其他视图的高度太高,无法显示快餐栏。检查活动中所有视图的高度。

    您作为 Snackbar.make() 的参数 view 提供的活动参考可能不正确。如果是这种情况,那么我建议您通过构造函数将活动引用传递给适配器,然后将其存储如下。

    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
    
    
    

我本来想发表评论并询问更多详细信息,但由于我的声誉低,我不被允许这样做。希望这些建议对您有用。

【讨论】:

1.不是这种情况 2. 我试过了,然后我使用了 Snackbar.make(activity.findViewById(R.id.coordID), ... 并收到错误,我试图在空对象引用上读取字段 activity.findViewById(R.id.coordID)!?

以上是关于自定义类中的 Snackbar 未显示的主要内容,如果未能解决你的问题,请参考以下文章

自定义 Snackbar 无法正常工作

自定义 Snackbar 操作按钮的颜色问题

使用可下载字体作为自定义 Snackbar 字体

未调用自定义 UIButton 的 setIsSelected 方法

iOS 帮助:UITableViewCell 类的自定义设计未显示在 UITableView 中

自定义类中的自定义对话框返回布尔值