自定义类中的 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
的层次结构中。它可以是任何东西,真的;例如,RecyclerView
。 Snackbar
将向上搜索以找到 CoordinatorLayout
本身。
@MikeM。我没有通过 View v = inflater 的视图...???该方法中有第二个和第三个参数,但对于第二个,我需要一个 ViewGroup,但我不知道从哪里得到它?
不,我是说LayoutInflater
和View 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 未显示的主要内容,如果未能解决你的问题,请参考以下文章
未调用自定义 UIButton 的 setIsSelected 方法