Recycler查看onClick

时间:2017-01-10 18:04:26

标签: android android-fragments android-recyclerview onclicklistener

我有一个活动,在其中创建一个标签布局。布局包含两个片段。第一个片段有一个回收者视图。 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

3 个答案:

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