【问题标题】:only want check-boxes or radio buttons in recyclerview to check one box只希望 recyclerview 中的复选框或单选按钮选中一个框
【发布时间】:2020-04-16 01:07:32
【问题描述】:

我目前正在使用复选框,但我也尝试过单选按钮。我似乎一次只能选择一个项目。正如你所看到的,我试图实现它,但它不起作用。我想要的结果是一次检查一个项目,即使应用程序关闭,该项目也保持检查状态。这是我实现复选框的地方

        options1 = new FirebaseRecyclerOptions.Builder<contact>().setQuery(databaseReference1,contact.class).build();
        adapter1 = new FirebaseRecyclerAdapter<contact, contactAdapter>(options1) {
            @Override
            protected void onBindViewHolder(@NonNull final contactAdapter holder, final int position, @NonNull contact model) {
                holder.contactName.setText(model.getContactName());
                holder.contactPhone.setText(model.getContactPhone());
                holder.chk.setTag(holder.getAdapterPosition());
                holder.chk.setChecked(position == lastCheckedPos);
                holder.chk.setOnCheckedChangeListener(null);
                if(holder.getAdapterPosition() == lastCheckedPos){
                    holder.chk.setChecked(true);
                }else{
                    holder.chk.setChecked(false);
                }
                holder.chk.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                    @Override
                    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                        if(isChecked){
                            holder.chk.setChecked(true);
                        }else {
                            holder.chk.setChecked(false);
                        }
                    }
                });
                holder.chk.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        for(int i =0; i <adapter1.getItemCount(); i++){
                            if(adapter1.getItem(i).isSelected(true)){
                                number = ((TextView) contactsView.findViewHolderForAdapterPosition(position).itemView.findViewById(R.id.contactPhone)).getText().toString();
                                Toast.makeText(getActivity(),"Data Inserted....." + number, Toast.LENGTH_SHORT).show();
                            }
                            else{
                                Toast.makeText(getActivity(),"Error", Toast.LENGTH_LONG).show();
                            }
                        }
                    }
                });
            }


我正在使用 firebase recyclerAdapter 从 firebase 中提取数据。这是我的模型类

public class contact {
    String contactName;
    String contactPhone;
    private boolean isSelected;

    public contact() {
    }

    public contact(String contactName, String contactPhone) {
        this.contactName = contactName;
        this.contactPhone = contactPhone;
    }

    public String getContactName() {
        return contactName;
    }

    public void setContactName(String contactName) {
        this.contactName = contactName;
    }

    public String getContactPhone() {
        return contactPhone;
    }

    public void setContactPhone(String contactPhone) {
        this.contactPhone = contactPhone;
    }

    public boolean isSelected(boolean selected){
        return isSelected= selected;
    }
}

这是我的适配器类:

public class contactAdapter extends RecyclerView.ViewHolder{

    public TextView contactName, contactPhone;
    CheckBox chk;
    AdapterView.OnItemClickListener itemClickListener;



    public contactAdapter(@NonNull View itemView) {
        super(itemView);
        contactName = itemView.findViewById(R.id.contactName);
        contactPhone = itemView.findViewById(R.id.contactPhone);
        chk = itemView.findViewById(R.id.myCheckBox);
    }
}

我尝试了很多方法,但我看到的所有示例似乎都没有帮助。不知道是大事还是小事。任何建议。

【问题讨论】:

    标签: java android checkbox android-recyclerview


    【解决方案1】:

    存储在共享首选项中选择的单选按钮的文本并使用 notifydatasetchanged()。在 onbind() 中,如果它与 sharedpref 值不匹配,则将其设置为 false

    【讨论】:

    • 您好,感谢您的回复。请您详细说明一下。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-16
    • 1970-01-01
    • 2019-01-21
    • 1970-01-01
    • 2023-03-21
    • 2013-10-03
    相关资源
    最近更新 更多