java - 更改列表视图项的颜色
问题描述
我有一个列表视图,其中包含有关我的客户的信息。它基本上是已预订工作的用户列表。listview 使用 firebase 数据库作为其来源。它连接到一个名为 Bookings 的节点。然后它将用户标识作为其密钥。
{
"Bookings": {
"User-Id appears here": {
"Fullname": "Name Appears here",
"Date": "",
"Valet Type": "",
"Car Model": "",
"CustomerID": "",
"Approved": ""
}
}
}
Approved 节点可以是 3 个值“Not Approved”、“Approved”、“Canceled”之一,具体取决于我想要更改包含数据的列表视图项的颜色的 Approved 值。我已经设法让列表视图在单击项目时更改颜色,但我希望它保持该颜色,除非“已批准”节点另有说明。
这是我到目前为止的代码,当单击该项目时它会发生变化。
bookingsref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull final DataSnapshot dataSnapshot) {
for (final DataSnapshot snapshot : dataSnapshot.getChildren()) {
date = snapshot.child("Date").getValue().toString();
name = snapshot.child("Fullname").getValue().toString();
valet = snapshot.child("ValetType").getValue().toString();
model = snapshot.child("VehicleModel").getValue().toString();
customerid = snapshot.child("UserId").getValue().toString();
confirm = snapshot.child("Approved").getValue().toString();
ApproveArray.add(confirm);
bookingID.add(customerid);
booking_info_minor.add(date + "\n" + "Name: "+ name + "\n"+"Valet Type: "+valet + "\n" +"Model: " + model + "\n"+"Customer ID: "+ customerid );
adapter =new ArrayAdapter<String>(Bookings .this,android.R.layout.simple_list_item_1,booking_info_minor);
lv.setAdapter(adapter);
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String c = bookingID.get(position).toString();
confirm = ApproveArray.get(position);
Intent intent=new Intent(getBaseContext(),Booking_details.class);
Bundle bundle = new Bundle();
bundle.putString( "UserId",c);
intent.putExtras(bundle);
startActivity(intent);
listColour(position,confirm);
}
});
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
private void listColour(int pos,String confirm){
Log.i("Conf",confirm);
if (confirm.equals("Approved")){
lv = findViewById(R.id.templist);
lv.getChildAt(pos).setBackgroundResource(R.color.approved);
}
if (confirm.equals("Not Approved")) {
lv = findViewById(R.id.templist);
lv.getChildAt(pos).setBackgroundResource(R.color.not_approved);
}
if (confirm.equals("Canceled")) {
lv = findViewById(R.id.templist);
lv.getChildAt(pos).setBackgroundResource(R.color.canceled);
}
解决方案
只需Override
ArrayAdaptergetView
并进行适当的更改,如下所示:
adapter = new ArrayAdapter<String>(Bookings.this, android.R.layout.simple_list_item_1, booking_info_minor) {
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
View view = super.getView(position, convertView, parent);
String confirm = ApproveArray.get(position);
switch (confirm) {
case "Approved":
view.setBackgroundResource(R.color.approved);
break;
case "Not Approved":
view.setBackgroundResource(R.color.not_approved);
break;
case "Canceled":
view.setBackgroundResource(R.color.canceled);
break;
}
return view;
}
};
推荐阅读
- flutter - Flutter App中如何设置和使用全局变量
- sql - 如果记录存在,如何显示查询结果,否则在postgresql中不存在记录?
- powershell - 使用 Import-PfxCertificate 导入 pfx 证书
- android-studio - Android Studio 图像未加载
- python - 扁平化多索引数据框
- powershell - 用于计算 AD 帐户到文件夹的 Powershell 过滤器
- c# - 使用 Autofac 多租户库时无法解析服务
- python - 如何在 setup.cfg 中使用带有需求文件的环境标记?
- continuous-integration - 仅在触发另一个手动作业时才运行 CI 作业
- asp.net-mvc - 剑道网格列ClientTemplate输入类型='文本',粘贴功能不绑定值