【问题标题】:My interface class don't work when I call it from a fragment当我从片段调用它时,我的接口类不起作用
【发布时间】:2016-08-15 11:48:48
【问题描述】:

我正在尝试在我的项目中实现此代码,但无法正常工作RecyclerView: how to catch the onClick on an ImageView?

我已经实现了一个接口来处理 recyclerview 中的 onclick imageview 和 onclick 行。问题是,当我尝试单击图像视图或行时,什么也没有发生。如果我在 ViewHolder 类中尝试相同的方法,则可以,因为我可以看到 Toast。问题是我需要从我的片段中进行这项工作。

我认为问题可能出在我将侦听器传递给 ViewHolder 的构造函数时,或者当我从片段中传递侦听器时。

一些帮助将不胜感激:

我的适配器类:

 private static List<DatabaseModel> dbList;
 private static Context context;
 private RecyclerViewClickListener listener;


public class MainTimelineRecyclerAdapter extends RecyclerView.Adapter<MainTimelineRecyclerAdapter.AnViewHolder> {

    public MainTimelineRecyclerAdapter(Context context, List<DatabaseModel> dbList, RecyclerViewClickListener listener ){
        this.dbList = new ArrayList<DatabaseModel>();
        this.context = context;
        this.dbList = dbList;
        this.listener = listener;

  }

public static class AnViewHolder extends RecyclerView.ViewHolder {

        public TextView name;
        public ImageView contact;

        public AnViewHolder(final View itemLayoutView, final RecyclerViewClickListener listener) {
            super(itemLayoutView);


            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if(listener != null)
                        listener.onRowClicked(getAdapterPosition());
                }
            });

            contact.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if(listener != null)
                        listener.onViewClicked(v, getAdapterPosition());
                }
            });

        }
    }

 public interface RecyclerViewClickListener {
        void onRowClicked(int position);
        void onViewClicked(View v, int position);
    }
}

我的片段:

public class MainTimeline extends Fragment implements RecyclerViewClickListener {
    private RecyclerViewClickListener listener;
.
.
.

        mAdapter = new MainTimelineRecyclerAdapter(getActivity(), dbList, listener);


   @Override
    public void onViewClicked(View view, int position) {
        Toast.makeText(getActivity(), "photo", Toast.LENGTH_SHORT).show();

    }

    @Override
    public void onRowClicked(int position) {
        Toast.makeText(getActivity(), "view", Toast.LENGTH_SHORT).show();

        }
}

【问题讨论】:

  • 在将侦听器引用传递给适配器之前,您是否在代码中的某处对其进行了初始化?当您的片段实现回调接口时,您可能希望将其作为侦听器传递: mAdapter = new MainTimelineRecyclerAdapter(getActivity(), dbList, this);
  • 嗨,Luksprog。谢谢它的工作!如果你愿意,请提供一些代码,我会接受你。

标签: android android-fragments imageview android-recyclerview


【解决方案1】:

如果您希望片段侦听适配器中发生的操作,则需要将其注册为适配器中发生的事件的侦听器(通过实现接口并将片段作为侦听器传递):

public class MainTimeline extends Fragment implements RecyclerViewClickListener {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // you don't need a private RecyclerViewClickListener listener; reference as you have the fragment itself
        mAdapter = new MainTimelineRecyclerAdapter(getActivity(), dbList, this); 
    }
    // implement the methods from the interface
}

【讨论】:

    猜你喜欢
    • 2015-11-18
    • 1970-01-01
    • 2019-02-06
    • 1970-01-01
    • 2020-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-20
    相关资源
    最近更新 更多