如何为“ RecyclerView.Adapter”添加项目单击侦听器 当用户单击“卡片视图”项时,数据发送到了PostContent片段?
还可以使用意图将数据从此适配器发送到新片段吗?
请注意我的代码:
in
答案 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)
有两种方法可以做到这一点。
编写recyclerview.onitem touchlistener(...)。然后在片段中消耗该事件。当您在touchlistener回调中获得项目位置时,可以直接从传递给适配器的列表中取出列表中的数据(假设片段中有列表引用)。
观察者模式。 在片段内定义一个功能接口(一种具有要传递的数据的必需参数的回调方法)实现。使用适配器的构造函数发送其参考。然后将引用存储在适配器内部的接口类型变量中。在卡上写入点击监听器。然后在卡上单击,使用接口类型变量调用方法。
答案 2 :(得分:0)
意图可用于将数据发送到新活动,但不能用于片段。您必须使用片段管理器并将附加束捆绑到其中以发送数据。您可以在此处参考文档,了解如何操作:
https://developer.android.com/training/basics/fragments/communicating#Deliver
要处理卡上的单击,可以在创建PostDataAdapter时创建一个侦听器。请参考以下链接以获取简单示例:
答案 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);