我有一个活动,在其中创建一个标签布局。布局包含两个片段。第一个片段有一个回收者视图。 Recycler视图中的每张卡都有一个复选框和一个字符串。
如果我点击复选框,我想将此卡片的字符串发送到活动中的列表,这样我就可以将其填充到第二个标签片段上。
在第一张片段卡上,我有一个点击,它将boolean设置为true,保存在一个对象上。我试图弄清楚如何在点击它时抓住它并将其发送到活动列表。
Activity-
public class MainActivity extends AppCompatActivity {
public static List toSendList = new ArrayList();
...more code
}
Recycler Adapter-
//initialize variables...
CheckBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (CheckBox.isChecked()) {
//MainActivity.toSendList.add(Obj);
obj.setIsChecked(true);
}
}
});
... more code
答案 0 :(得分:2)
您可以尝试EventBus,看看您是否喜欢它。有了它,你定义一个 '事件'它也可以是您想要传递给您的活动的对象(或包装它的事件)。在接收活动中,添加您的订阅者。然后通过调用
传递事件/对象EventBus.getDefault().post(new CustomEvent());
并且仍然附加订阅者的任何地方都将收到该活动。
答案 1 :(得分:1)
您可以实现一个将在Activity上使用的侦听器。例如:
您可以为点击侦听器创建一个界面。
public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.PhotoHolder> {
// ... all the code
public interface RecyclerViewOnClickListener(/* same arguments as above */);
}
在您的观看者身上。
public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
public ViewHolder(View v) {
super(v);
// ... do all the initialization
v.setOnClickListener(this);
}
@Override
public void onClick(View v) {
mOnClickListener(int position /* or whatever argument you like */)
}
}
在RecyclerAdapter
上存储一个用于点击的监听器。所以适配器最终会有更多的代码:
public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.PhotoHolder> {
// ... all the code
public interface RecyclerViewOnClickListener(/* same arguments as above */);
public RecyclerAdapter(RecyclerViewOnClickListener onClickListener) {
mOnClickListener = onClickListener;
}
}
最后,在您的Activity中,您只需实例化RecyclerViewOnClickListener
并将其作为适配器的参数传递。
答案 2 :(得分:1)
试试这个:
Activity-
public class MainActivity extends AppCompatActivity {
public static List toSendList = new ArrayList();
...more code
public setPassData(String string)
{
//do something with this string
}
}
Fragment A/B
public void setPassData(String string)
{
((ActivityName)getActivity()).setPassData(string);
}
Recycler Adapter-
//initialize variables...
CheckBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (CheckBox.isChecked()) {
//MainActivity.toSendList.add(Obj);
obj.setIsChecked(true);
((FragmentName)mContext).setPassData(SomeStringToPass);
}
}
});