簡體   English   中英

使用接口將字符串從適配器傳遞到片段

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM