【问题标题】:Snackbar from custom class not showing自定义类中的 Snackbar 未显示
【发布时间】: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,我相信你有。

标签: android android-recyclerview snackbar


【解决方案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可能有两个原因。

    1. 其他视图的高度太高,无法显示快餐栏。检查活动中所有视图的高度。
    2. 您作为 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)!?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-04
    • 2011-02-14
    • 2016-11-21
    • 2018-04-15
    相关资源
    最近更新 更多