android - android:包含回收器视图的片段中的复选框使用情况
问题描述
在我关于健康的应用程序中,有一个片段,医生可以在其中添加或拒绝患者到他/她自己的患者列表中。我使用 arecyclerView
来显示所有患者,在每个项目中都有关于患者的信息,例如姓名、生日、城市和checkBox
显示患者是否添加的信息。页面顶部还有一个checkBox
选择所有患者,也有 add 和 deny textViews
。我想使用这些textViews
来添加或拒绝他们自己选择的患者checkBoxes
。单击添加后textView
,患者将添加到 Firebase 数据库。我无法做到这些功能。我该怎么办?这是我的代码:
public class FragmentHastaBasvurulari extends Fragment {
private ArrayList<String> hastaAdi=new ArrayList<>();
private ArrayList<String> hastaOzellikleri=new ArrayList<>();
private ArrayList<String> hastaliklar=new ArrayList<>();
private ArrayList<String> hastaOnayi=new ArrayList<>();
private ArrayList<Users> hastalar=new ArrayList<>();
private FirebaseAuth mAuth;
private FirebaseUser firebaseUser;
private FirebaseDatabase database;
private DatabaseReference myRef;
private RecyclerView rvHastaBasvuru;
private CheckBox checkBoxHepsiniSec;
private TextView tvReddet,tvOnayla;
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
getActivity().setTitle("Hasta Başvuruları");
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_hasta_basvurulari, container, false);
mAuth=FirebaseAuth.getInstance();
firebaseUser=mAuth.getCurrentUser();
database=FirebaseDatabase.getInstance();
myRef=database.getReference();
rvHastaBasvuru=(RecyclerView) view.findViewById(R.id.rvHastaBasvuru);
checkBoxHepsiniSec=(CheckBox) view.findViewById(R.id.checkBoxHepsiniSec);
tvOnayla=(TextView) view.findViewById(R.id.tvOnayla);
tvReddet=(TextView) view.findViewById(R.id.tvReddet);
myRef.child("kullanicilar")
.child(firebaseUser.getUid()).child("hastalar").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for(DataSnapshot ds: dataSnapshot.getChildren()){
EklenecekHasta eklenecekHasta = ds.getValue(EklenecekHasta.class);
DatabaseReference hastaRef= FirebaseDatabase.getInstance().getReference().child("kullanicilar").child(eklenecekHasta.getUserId());
hastaRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
Users hasta = dataSnapshot.getValue(Users.class);
String sehir, dogumTarihi,hastaliklar1;
if(hasta.getSehir().equals("Seçiniz")){
sehir="---";
} else {
sehir=hasta.getSehir();
}
if(hasta.getDogumtarihi().equals("../../....")){
dogumTarihi="---";
} else {
dogumTarihi=hasta.getDogumtarihi();
}
if(hasta.getHastaliklar().equals("")){
hastaliklar1="---";
} else {
hastaliklar1=hasta.getHastaliklar();
}
hastaAdi.add(hasta.getAd()+" "+hasta.getSoyad());
hastaOzellikleri.add(hasta.getCinsiyet()+" "+sehir+" "+dogumTarihi);
hastaliklar.add(hastaliklar1);
hastaOnayi.add(hasta.getOnay());
hastalar.add(hasta);
}
rvHastaBasvuru.setAdapter(adapter);
rvHastaBasvuru.setLayoutManager(new LinearLayoutManager(getContext()));
adapter.notifyDataSetChanged();
}
@Override
public void onCancelled(DatabaseError error) {
}
});
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
HastaListesiAdapter adapter= new HastaListesiAdapter(getContext(),hastaAdi,hastaOzellikleri,hastaliklar,hastaOnayi,hastalar);
});
tvOnayla.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
tvReddet.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
return view;
}
这是我的适配器类代码:
public class HastaListesiAdapter extends RecyclerView.Adapter<HastaListesiAdapter.ViewHolder>{
private static final String TAG="HekimListesiAdapter";
private ArrayList<String> hastaAdi=new ArrayList<>();
private ArrayList<String> hastaOzellikleri=new ArrayList<>();
private ArrayList<String> hastaliklar=new ArrayList<>();
private ArrayList<String> hastaOnayi=new ArrayList<>();
private ArrayList<Users> hastalar=new ArrayList<>();
private Context myContext;
public HastaListesiAdapter(Context myContext, ArrayList<String> hastaAdi, ArrayList<String> hastaOzellikleri,
ArrayList<String> hastaliklar,ArrayList<String> hastaOnayi,ArrayList<Users> hastalar) {
this.hastaAdi = hastaAdi;
this.hastaOzellikleri = hastaOzellikleri;
this.myContext = myContext;
this.hastaliklar=hastaliklar;
this.hastaOnayi=hastaOnayi;
this.hastalar=hastalar;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int i) {
View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.hasta_item,parent,false);
ViewHolder holder=new ViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(@NonNull final ViewHolder holder, final int i) {
holder.itemHastaAd.setText(hastaAdi.get(i));
holder.itemHastaOz.setText(hastaOzellikleri.get(i));
holder.itemHastaliklar.setText(hastaliklar.get(i));
//Hasta hekim tarafından onaylanmış mı onaylanmamış mı
if(hastaOnayi.get(i).equals("evet")){
holder.checkBoxHastaSec.setChecked(true);
} else if(hastaOnayi.get(i).equals("hayır")){
holder.checkBoxHastaSec.setChecked(false);
}
// CheckBox ın tıklanması üzerine yapılacak işlem
holder.checkBoxHastaSec.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
String secilimi;
if(buttonView.isChecked()){
secilimi="evet";
} else {
secilimi="hayır";
}
}
});
}
@Override
public int getItemCount() {
return hastaAdi.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
TextView itemHastaAd,itemHastaOz,itemHastaliklar;
CheckBox checkBoxHastaSec;
public ViewHolder(@NonNull View itemView) {
super(itemView);
itemHastaAd=itemView.findViewById(R.id.itemHastaAd);
itemHastaOz= itemView.findViewById(R.id.itemHastaOz);
itemHastaliklar=itemView.findViewById(R.id.itemHastaliklar);
checkBoxHastaSec=itemView.findViewById(R.id.checkBoxHastaSec);
}
}
解决方案
我建议你用你的自定义模型的一个数组列表替换你的字符串数组列表,你也可以在你的复选框中使用一个布尔值来表示数据。例如创建一个这样的模型:
class YourModel()
{
String hastaAdi;
String hastaOzellikleri;
//... another variables
Boolean isAdded;
//... set & get or other methods
}
现在您应该将 ArrayList 传递给您的适配器,并通过此 arrayList 为您的 recyclerView 小部件设置值。然后您可以使用 isAdded 布尔值初始化或更改复选框值。
推荐阅读
- node.js - 无法安装 Alexa ASK-CLI “请求已弃用”
- python - 给定一个 3D 图像数组,返回一个索引列表,其值高于阈值且所有选定索引之间的距离最小?
- flutter - 如何计算 Flutter/Dart 中的纵向冗余校验 (LRC)?
- c# - 错误:“NullReferenceException:对象引用未设置为对象的实例”,用于 Unity 中一个对象上的 2 个脚本
- c - 使用 waitpid 和 WNOHANG 区分进程状态
- python - 从句子中提取时间间隔实体
- if-statement - Foreach 在带有连接表的 While 循环内
- mongodb - Mongoose 查询一个数组包含另一个数组中的一个值
- scala - Spark:使用数组加入条件(可为空的)
- python - 从文件中导入 JSON 数据作为类实例