代码之家  ›  专栏  ›  技术社区  ›  Shibin Kalliatt

激活或取消激活recyclerview项

  •  0
  • Shibin Kalliatt  · 技术社区  · 7 年前

    我有一个片段,其中包含一个recyclerview和一个浮动动作按钮。在recyclerview中,每行包含一个默认设置为禁用的单选按钮。我的要求是,在浮动操作按钮单击事件时,我需要在每一行启用这些单选按钮。有什么解决办法吗?

    提前感谢。。

    好啊我有一个解决方案。

    这是我的密码。

    fab.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
    
                        for (int i = 0; i <= adapter.getItemCount(); i++) {
    
                            View childVIew = recyclerView.getChildAt(i);
    
                            if (childVIew != null) {
                                RadioButton radioYes = childVIew.findViewById(R.id.radio_yes_my_health_info);
                                radioYes.setEnabled(true);
    
                                RadioButton radioNo = childVIew.findViewById(R.id.radio_no_my_health_info);
                                radioNo.setEnabled(true);
                            }
                        }
    
                        fab.setImageResource(R.drawable.ic_save_white_24dp);
                        recyclerView.getRecycledViewPool().setMaxRecycledViews(0, 0);
                    }
                });
    

    现在,单击FAB按钮,我的recyclerview中的所有单选按钮都将启用,我可以单击以更改每个单选按钮的状态。但我有个问题。当我单击FAB按钮时,recyclerview内的所有单选按钮都将被激活,但当我滚动recyclerview时,所有这些单选按钮都将被禁用或再次停用。请给我一个解决方案。

    2 回复  |  直到 7 年前
        1
  •  0
  •   Shivam    7 年前

    您可以在适配器中设置一个标志,如

    boolean isActivated = false;
    
    public void setActivated(boolean activated) {
        isActivated = activated;
    }
    

    在onBindViewHolder()方法中,可以检查标志并相应地设置标志的状态。

    在晶圆厂的OnClickListener中,呼叫

    adapter.setActivated(true);//true or false as per your requirement
    adapter.notifyDataSetChanged();
    

    这应该行得通。

        2
  •  0
  •   Justin Dachille    7 年前

    单击按钮时,可以尝试在每个视图中循环,如下所示:

    for (int i = 0; i < adapter.getItemCount(); i++) {
        View view = recycler.getLayoutManager().findViewByPosition(i);
        view.setSelected(true); //Select item
        notifyItemChanged(i); //Notify item changed
    }