单击单个项目以选择回收商视图中的所有项目

Has*_*eed 4 android android-recyclerview recyclerview-layout

我会稍微解释一下我的问题。我的回收站视图布局中有一个复选框,一开始是不可见的。当我单击回收站视图的项目之一时,我希望复选框在所有项目中都可见。我在互联网上搜索了太长时间,找不到解决我的问题的方法。


public class ViewInventoryListAdapter extends RecyclerView.Adapter<ViewInventoryListAdapter.ListViewHolder> {

private Context context;
List<ViewAllInventoryDevicesDetails> list;
private Button assignButton;
private UserLoginResponseModel userLoginResponseModel;
private android.support.v4.app.Fragment fragment;
private FragmentManager fragmentManager;
private FragmentActivity myContext;
private Activity activity;
private int counter = 0;
private List<String> selectedDeviceSerialNumbers;
private static CheckBox checkBox;

public ViewInventoryListAdapter(Context context, List<ViewAllInventoryDevicesDetails> list, Button assign, UserLoginResponseModel model, Activity activity ) {
    this.context = context;
    this.list = list;
    this.assignButton = assign;
    this.userLoginResponseModel = model;
    this.activity =activity;
}

@NonNull
@Override
public ListViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    LayoutInflater inflater = LayoutInflater.from(context);
    View view = inflater.inflate(R.layout.view_all_inventory_listlayout_cardview,null);
    //Specifying Activity for Fragment Transaction
    activity = activity;
    myContext = (FragmentActivity) activity;
    //Iniallizing Fragment Manager
    fragmentManager = myContext.getSupportFragmentManager();
    selectedDeviceSerialNumbers = new ArrayList<>();
    checkBox =  view.findViewById(R.id.view_inventory_checkbox);
    return new ViewInventoryListAdapter.ListViewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull final ListViewHolder holder, final int position) {
    Typeface iconFont = FontManager.getTypeface(context, FontManager.FONTAWESOME);
    holder.deviceSerialNumber.setText(list.get(position).getSerialNumber());
    holder.deviceType.setText(list.get(position).getDeviceType());
    FontManager.markAsIconContainer(holder.deviceIcon, iconFont);
    holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View view) {

            holder.isSelected.setVisibility(View.VISIBLE);
            //holder.isSelected.setVisibility(View.VISIBLE);
            holder.isSelected.setChecked(true);

            assignButton.setVisibility(View.VISIBLE);

            return false;
        }
    });
  holder.isSelected.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View view) {
          holder.isSelected.setChecked(false);
          holder.isSelected.setVisibility(View.INVISIBLE);
          //Login For Visibility For assign Button
          counter--;
          selectedDeviceSerialNumbers.remove(list.get(position).getSerialNumber());
          if(counter == 0){
              assignButton.setVisibility(View.GONE);
          }
      }
  });

  assignButton.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View view) {
          Bundle bundle = new Bundle();
          if(userLoginResponseModel != null){
              bundle.putSerializable("UserModel", userLoginResponseModel);
              bundle.putSerializable("serialNumbers", (Serializable) selectedDeviceSerialNumbers);
          }
          fragment = new AssingSelectedDevicesFragment();
          fragment.setArguments(bundle);
          fragmentManager.beginTransaction()
                  .replace(R.id.flContent, fragment)
                  .commit();
      }
  });

}

@Override
public int getItemCount() {
    return list.size();
}

class ListViewHolder extends RecyclerView.ViewHolder{

    private TextView deviceType, deviceSerialNumber, deviceIcon;
    private CheckBox isSelected;

    public ListViewHolder(View itemView){
        super(itemView);
        deviceType = itemView.findViewById(R.id.view_inventory_deviceType_textview);
        deviceSerialNumber = itemView.findViewById(R.id.view_inventory_serialNumber_textview);
        deviceIcon         = itemView.findViewById(R.id.view_inventory_image_textview);
        isSelected         = itemView.findViewById(R.id.view_inventory_checkbox);
    }

    }

 }
Run Code Online (Sandbox Code Playgroud)

这是我的OnBindViewHolder文本。我可以通过单独单击项目来更改复选框的可见性。我只希望单击即可更改所有项目。就像我们手机中的联系人列表一样。您只需长按项目,复选框就会出现在所有项目中。任何帮助,将不胜感激。此致

The*_*rer 5

这就是我做这样的事情的方式:

向您的ViewAllInventoryDevicesDetails班级添加一个新字段:

public boolean showCheckbox = false;
Run Code Online (Sandbox Code Playgroud)

向您的适配器添加一些辅助方法:

private void showAllBoxes() {
    for (ViewAllInventoryDevicesDetails item : list) {
        item.showCheckbox = true;
    }
    notifyDataSetChanged();
}

private void hideAllBoxes() {
    for (ViewAllInventoryDevicesDetails item : list) {
        item.showCheckbox = false;
    }
    notifyDataSetChanged();
}
Run Code Online (Sandbox Code Playgroud)

然后,在您的onBindViewHolder()方法中,使用该标志:

@Override
public void onBindViewHolder(@NonNull final ListViewHolder holder, final int position) {
     ViewAllInventoryDevicesDetails item = list.get(position);
     holder.isSelected.setVisibility(item.showCheckbox ? View.VISIBLE : View.GONE);
}
Run Code Online (Sandbox Code Playgroud)

您只需要showAllBoxes()在想要显示所有内容并hideAllBoxes()再次隐藏它们时调用。