无法通过findViewById

时间:2016-10-03 19:07:06

标签: android android-recyclerview android-context android-snackbar snackbar

我想做什么?

我有一个RecyclerView,它会保留行,看起来像ListView。这些列表的行在feed_listview_row.xml定义。我对此RecyclerAdapter有一个RecyclerView,它名为Feed_Recycler_Adapter.java,您可以在下面看到它。

当用户长按其中一行时,我想显示AlertDialog。有一个问题是用户是否要删除此行或保留它。用户接受删除行后。将SnackBar通知用户并给予她/他最后一次机会将其取回。

问题

我无法查看SnackBar,因为我无法显示CoordinatorLayout

代码

Feed_Recycler_Adapter.java

holder.layout.setOnLongClickListener(new View.OnLongClickListener() {
  @Override
 public boolean onLongClick(View v) {

  cl = (CoordinatorLayout) v.findViewById(R.id.FeedCoordinatorLayout); 
   /*this row above is failing to fill the cl variable. 
    This cl variable returns null! I need to get the coordinatorlayout for snackbar*/
    String selectedListId = mDataset.get(position).getListId();
    String selectedPostId = mDataset.get(position).getPostId();
    Push_Options.ownerOrfollower(v.getContext(), selectedListId, selectedPostId, cl);
              return true;
                    }
                });

我试过

我试图在Feed_Recycler_Adapter.ViewHolder onCreateViewHolder上膨胀content_feed并将其用作获取FeedCoordinatorLayout的视图,但没有解决问题,但我没有因为cl不为空而得到任何错误。但也没有显示SnackBar

2 个答案:

答案 0 :(得分:0)

我阅读了你的一些大问题,发现你需要rootView(coordinatorLayout)
这可能对你有帮助:
使用YourAdapter param:

将构造函数添加到Context
public yourAdapter(Context activity){
    context = activity // context is local object
}

现在在您创建YourAdapter实例的活动中执行以下操作:

adapter = new YourAdapter(YourActivity.this); 

当你想要展示snakBar时:

Snackbar.make(((YourActivity) context).coordinatorLayout, "Post deleted.", Snackbar.LENGTH_LONG).show()

确保在YourActivity类中定义coordinatorLayout。

答案 1 :(得分:0)

我从dariush f的回答中得到了一些帮助。

我修改了现有的构造函数以获得CoordinatorLayout字段。

class Feed_Recycler_Adapter extends RecyclerView.Adapter<Feed_Recycler_Adapter.ViewHolder> {

public static String TAG = "Feed Recycler Adapter";
private CoordinatorLayout cl;
private ArrayList<Feed_List_Class> mDataset;
//CoordinatorLayout cl;
// Provide a suitable constructor (depends on the kind of dataset)
Feed_Recycler_Adapter(ArrayList<Feed_List_Class> myDataset,CoordinatorLayout coordinatorLayout) {
    cl=coordinatorLayout;
    mDataset = myDataset;
}

我在实例化此适配器时发送协调器布局。像这样:

CoordinatorLayout cl = (CoordinatorLayout) findViewById(R.id.FeedCoordinatorLayout) ;
mAdapter = new Feed_Recycler_Adapter(posts,cl);

由于我的onLongClick方法已经在我的Adapter类中,我可以使用我的构造函数设置的cl变量创建一个快餐栏。

Push_Options.ownerOrfollower(v.getContext(), selectedListId, selectedPostId, cl);