[英]Pass String from Adapter to Fragment using interface
這個問題是基於這個答案。
我試圖將一個字符串從我的RecyclerView.Adapter
傳遞給我的片段。
在我的適配器中,我添加了以下內容:
onItemClickListner onItemClickListner;
public void setOnItemClickListner(VideoAdapter.onItemClickListner onItemClickListner) {
this.onItemClickListner = onItemClickListner;
}
public interface onItemClickListner{
void onClick(String str);//pass your object types.
}
一旦我的適配器中的項目數量少於 1(適配器為空),我就會傳遞以下字符串:
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
添加了上述內容。
你注意到這一點了嗎? 從您的參考網址
onItemClickListner your_interface;
public void setOnItemClickListner(RecyclerViewAdpater.onItemClickListner onItemClickListner) {
this.your_interface= onItemClickListner;
}
this.onItemClickListner = onItemClickListner
這將是自我分配。 這可能是導致問題的原因。
這里your_interface
正在初始化。 我懷疑您的onItemClickListner
未初始化。
所以嘗試通過更改名稱
這是我工作 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();
}
});
}
其余代碼與您的相似,吐司顯示正確。
首先,感謝大家的回答和評論。
我通過執行以下操作解決了這個問題。
在我的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);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.