【问题标题】:Recycler View onClick回收站查看 onClick
【发布时间】:2017-01-10 18:04:26
【问题描述】:

我有一个在其中创建选项卡布局的活动。布局包含两个片段。第一个片段有一个回收者视图。回收站视图中的每张卡片都有一个复选框和一个字符串。

如果我点击复选框,我想将此卡的字符串发送到位于活动中的列表,以便我可以将其填充到第二个选项卡片段中。

在第一个片段卡上,我有一个将布尔值设置为 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

【问题讨论】:

    标签: android android-fragments android-recyclerview onclicklistener


    【解决方案1】:

    你可以试试EventBus,看看你喜不喜欢。有了它,你定义了一个 “事件”也可以是您想要传递给您的活动的对象(或包装它的事件)。在接收活动中,添加您的订阅者。然后通过调用

    传递事件/对象
    EventBus.getDefault().post(new CustomEvent());
    

    并且订阅者仍然连接的任何地方都将收到该事件。

    【讨论】:

    • 感谢您提供使用此库的提示我假设它使用 RX 库?
    【解决方案2】:

    您可以实现将在 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 并将其作为适配器的参数传递。

    【讨论】:

    • 感谢您的评论!我有一个关于视图持有者的快速问题,我看到我们正在调用 mOnClickListener,这是来自适配器的同一个变量吗?回收器适配器构造函数的参数不会初始化这个监听器吗?
    • 您可以通过在复选框上添加对侦听器的调用来简化此操作。但是是的,适配器是一样的。
    • 这是完美的解决方案,再次感谢您的帮助!
    【解决方案3】:

    试试这个:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      相关资源
      最近更新 更多