这是基于this答案的问题。
我正在尝试将RecyclerView.Adapter
中的字符串传递给片段。
在我的适配器中,添加了以下内容:
onItemClickListner onItemClickListner;
public void setOnItemClickListner(VideoAdapter.onItemClickListner onItemClickListner) {
this.onItemClickListner = onItemClickListner;
}
public interface onItemClickListner{
void onClick(String str);//pass your object types.
}
一旦适配器中的项数少于一个(适配器为空),我就传递以下字符串:
onItemClickListner.onClick("TESTING");
然后,在我的片段中添加以下内容:
//I do the following after setting my adapter
videoAdapter.setOnItemClickListner(new VideoAdapter.onItemClickListner() {
@Override
public void onClick(String str) {
Toast.makeText(getActivity(), str, Toast.LENGTH_SHORT).show();
}
});
由于某种原因,字符串为空/空,并且崩溃指向onItemClickListner.onClick("TESTING");
。
有人可以看看我可能做错了什么吗?
编辑:
我在onItemClickListner.onClick("TESTING");
内部呼叫OnMenuItemClickListener
,如下所示:
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.delete:
onItemClickListner.onClick("TESTING");
return true;
}
我没有提供完整的片段,因为我只是在onCreateView
中添加了以上内容。
答案 0 :(得分:0)
您注意到了吗?来自您的参考文献url
developer
onItemClickListner your_interface;
public void setOnItemClickListner(RecyclerViewAdpater.onItemClickListner onItemClickListner) {
this.your_interface= onItemClickListner;
}
这就是自我分配。这可能是导致问题的原因。
此处this.onItemClickListner = onItemClickListner
正在初始化。我怀疑您的your_interface
尚未初始化。
因此,请尝试更改名称
答案 1 :(得分:0)
这是我的RecyclerView.Adapter示例的一部分
@Override
public void onBindViewHolder(ViewHolder holder, final int position) {
final PopupMenu popupMenu = new PopupMenu(context, holder.itemView);
popupMenu.inflate(R.menu.simple_menu);
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.item1:
if (onEmptyListListener != null) {
onEmptyListListener.onEmpty("example string");
}
return true;
default:
return false;
}
}
});
final String name = values.get(position);
holder.txtHeader.setText(name);
holder.txtFooter.setText("Footer: " + name);
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
popupMenu.show();
}
});
}
代码的其余部分类似于您的代码,祝酒词显示正确。
答案 2 :(得分:0)
首先,感谢您的所有回答和评论。
我通过以下操作解决了这个问题。
在我的Adapter
中,添加了以下内容:
private UpdateInterface listner;
public interface UpdateInterface {
void recyclerviewOnUpdate(int amount);
}
public VideoAdapter(Context context, ArrayList<PathModel> thumbPathList, ArrayList<PathModel> videoPathList, UpdateInterface listner) {
this.context = context;
this.thumbPathList = thumbPathList;
this.videoPathList = videoPathList;
//I added this
this.listner=listner;
}
我以与在问题中相同的方式调用接口:
//Passing the amount of items in adapter
listner.recyclerviewOnUpdate(getItemCount());
这与我之前所做的非常相似,但是现在我在片段中实现了这样的接口:
public class VideoFragment extends Fragment implements VideoAdapter.UpdateInterface
现在我可以使用一种方法,如下所示:
@Override
public void recyclerviewOnUpdate(int amount) {
//Now I can get the int and check if the adapter is empty after removing a item
if (amount<1) {
txtEmptyAdapter.setVisibility(View.VISIBLE);
}
}