android - 当我从 fragment 调用它时,我的接口(interface)类不起作用

标签 android android-fragments imageview android-recyclerview

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

我已经实现了一个接口(interface)来处理 recyclerview 中的 onclick imageview 和 onclick row。问题是,当我尝试单击 ImageView 或行中时,什么也没有发生。如果我在 ViewHolder 类中尝试相同的操作,则有效,因为我可以看到 Toast。问题是我需要从我的 fragment 中完成这项工作。

我认为问题可能出在我将监听器传递给 ViewHolder 的构造函数或从 fragment 传递监听器时。

一些帮助将不胜感激:

我的适配器类:

 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);
    }
}

我的 fragment :

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();

        }
}

最佳答案

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

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
}

关于android - 当我从 fragment 调用它时,我的接口(interface)类不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38954507/

相关文章:

安卓.Gradle : Is it possible to get current module name programmatically?

java - 时间推送通知java

java - Android - 从 Activity 到广播接收器获取偏好

android - 如何在不丢失数据的情况下返回我的父 Activity ?

android - 如何获得圆圈Imageview的中心

android - 如何替换 fragment 中的 fragment ?

Android - 如何向此 fragment 添加 Google map ?

java - ImageView 尺寸看起来比实际尺寸小

android - 在 Android 中拖放重叠的 ImageView

android - ImageView ArrayList 给出 NullPointerException