如何使用CardView Item在`RecyclerView.Adapter'中单击侦听器

时间:2018-08-17 16:55:25

标签: java android android-fragments android-recyclerview

如何为“ RecyclerView.Adapter”添加项目单击侦听器 当用户单击“卡片视图”项时,数据发送到了PostContent片段?

还可以使用意图将数据从此适配器发送到新片段吗?

请注意我的代码:

in

5 个答案:

答案 0 :(得分:0)

您可以有意地将数据从适配器发送到片段:

[11:59:27][com.mycompany.app:my-app] [main] INFO org.codehaus.plexus.compiler.javac.JavacCompiler - Compiling 27 source files to C:\TeamCity\buildAgent2nd\work\bf68b71269ca1c06\MDA Online Framework\target\test-classes
[11:59:30][com.mycompany.app:my-app] [main] INFO org.apache.maven.plugin.compiler.TestCompilerMojo - -------------------------------------------------------------
[11:59:30][com.mycompany.app:my-app] [main] ERROR org.apache.maven.plugin.compiler.TestCompilerMojo - COMPILATION ERROR : 

尽管我的建议是管理来自父活动的屏幕流,并通过回调(即使是使用自定义界面)来管理数据

答案 1 :(得分:0)

有两种方法可以做到这一点。

  1. 编写recyclerview.onitem touchlistener(...)。然后在片段中消耗该事件。当您在touchlistener回调中获得项目位置时,可以直接从传递给适配器的列表中取出列表中的数据(假设片段中有列表引用)。

  2. 观察者模式。 在片段内定义一个功能接口(一种具有要传递的数据的必需参数的回调方法)实现。使用适配器的构造函数发送其参考。然后将引用存储在适配器内部的接口类型变量中。在卡上写入点击监听器。然后在卡上单击,使用接口类型变量调用方法。

答案 2 :(得分:0)

意图可用于将数据发送到新活动,但不能用于片段。您必须使用片段管理器并将附加束捆绑到其中以发送数据。您可以在此处参考文档,了解如何操作:

https://developer.android.com/training/basics/fragments/communicating#Deliver

要处理卡上的单击,可以在创建PostDataAdapter时创建一个侦听器。请参考以下链接以获取简单示例:

https://stackoverflow.com/a/40584425/4260853

答案 3 :(得分:0)

要为ItemCLickListener添加RecyclerView,您需要实现Interface将要实现的自定义Fragment。单击列表项后,将调用接口的回调函数。

CustomItemClickListener.java

public CustomItemClickListener {
    void onItemClick(Object data);
}

只需将这些添加到PostDataAdapter:

PostDataAdapter.java

private CustomItemClickListner clickListener;
public PostDataAdapter(CustomItemClickListner listener, List<PostData> postDataList) {
    PostDataList = postDataList;
    clickListener = listener
}


@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
    holder.vPostCardView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // Modify the parameters of the function according to what you want to send to the fragment 
            // As soon as this is called, the `onItemClick` function implemented in the Fragment gets called.
            clickListener.onItemClick(Object data);
        }
    });
}

Fragment.java

CustomFragment extends Fragment implements CustomItemClickListener {
    public CustomFragment() {
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view;
        PostDataAdapter adapter = new PostDataAdapter(this, new ArrayList<PostData>)
        return view;
    }

    @Override
    public void onItemClick(Object data) {
        // Handle the data sent by the adapter on item click
    }
}

答案 4 :(得分:0)

要为Cardview添加点击项,您可以通过id在MyViewHolder类中找到Cardview,并在onBindViewHolder中为其设置点击列表管理器,如下所示:

@Override
public void onBindViewHolder(MyViewHolder holder, int position) {

holder.vPostCardView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        //write your codes here

    }
});
}

如果您有想要将其数据发送到片段的意图,则可以获取该意图数据并将其与捆绑包一起发送到片段。例如,执行以下操作。

Bundle bundle = new Bundle();
bundle.putString("your_key",intent.getStringExtra("your_item_key_in_intent"));

然后用

将捆绑包发送到您的片段
fragment.setArguments(bundle);