如何在无法直接访问 View Class 的地方添加 Snackbar

How to add Snackbar where View Class is not directly accessible

我在代码中添加 Snackbar 时遇到问题。其实我想在 ItemTouchHelper 对象中显示一个 Snackbar 。我正在使用 ItemTouchHelper 删除 swipe 上的项目,然后显示 Snackbar 该项目是 removed。如何在我无权访问 View 对象的地方添加 Snakbar。

final ItemTouchHelper itemTouchHelper = new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) {
    @Override
    public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {
        return false;
    }

    @Override
    public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {

        //here I want to add a Snackbar but i don't have access to View object

        int currentPosition = viewHolder.getAdapterPosition();
        Item item = itemList.get(currentPosition);
        int id = item.getId();
        databseHandler.deleteItem(id);
        itemList.remove(viewHolder.getAdapterPosition());
        recyclerViewAdapters.notifyItemRemoved(viewHolder.getAdapterPosition());

    }
});
itemTouchHelper.attachToRecyclerView(recyclerView);

这句话是什么意思?

first parameter(View) of Snakbar is not available

您可以从那里调用显示 Snackbar 的方法,并使用 Activity 布局的根视图作为 Snackbar 的参数。

private void showSnackbar(String message) {
  View rootView = findViewById(android.R.id.content);
  if(rootView != null) {
    Snackbar.make(rootView, message, Snackbar.LENGTH_SHOW).show(); 
  }
}

您可以从回调中调用它:

@Override
public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {

  //here I want to add a Snackbar but first parameter(View) of Snakbar is not available
   showSnackbar("Your message");

   ...
}