Android 如何基于字符串值禁用列表视图项?
我正在创建一个应用程序,该应用程序从firebase数据库中提取数据,并以自定义listview的形式呈现给用户。我想这样做,在列表项中,如果textview包含单词“Unavailable”,用户不应该无法选择该列表项。如何动态地实现这一点 Java代码:Android 如何基于字符串值禁用列表视图项?,android,firebase,listview,android-listview,Android,Firebase,Listview,Android Listview,我正在创建一个应用程序,该应用程序从firebase数据库中提取数据,并以自定义listview的形式呈现给用户。我想这样做,在列表项中,如果textview包含单词“Unavailable”,用户不应该无法选择该列表项。如何动态地实现这一点 Java代码: @Override public void onStart() { super.onStart(); Query query = FirebaseDatabase.getInstan
@Override
public void onStart()
{
super.onStart();
Query query = FirebaseDatabase.getInstance().getReference().child("TimeSlots").orderByChild("id");
FirebaseListOptions<BookingTimes> options = new FirebaseListOptions.Builder<BookingTimes>()
.setLayout(R.layout.time_list_layout_adapter)
.setLifecycleOwner(getActivity())
.setQuery(query, BookingTimes.class)
.build();
adapter = new FirebaseListAdapter(options)
{
@Override
protected void populateView(View v, Object model, int position)
{
timeTextV = v.findViewById(R.id.timeTV);
availabilityTextv = v.findViewById(R.id.availabilityTV);
BookingTimes bookingTimes = (BookingTimes) model;
timeTextV.setText(bookingTimes.getTime());
availabilityTextv.setText(bookingTimes.getAvailability());
/*if (availabilityTextv.getText().toString().equals("Unavailable"))
{
availabilityTextv.setEnabled(false);
}*/ //<==== doesn't work
}
@Override
public boolean areAllItemsEnabled()
{
return false;
}
@Override
public boolean isEnabled(int position)
{
/*if(position == 3)
{
return false;
} //<== this works, but how do i do it dynamically based on value?*/
/*if(availabilityTextv.getText().toString().equals("Unavailable"))
{
getItem(position);
return false;
}*/ //<== doesn't work
return super.isEnabled(position);
}
};
listView.setAdapter(adapter);
数据库:
应用程序:
您必须在
isEnabled(int)
中直接使用物品可用性
新FirebaseListAdapter(选项)
{
...
@凌驾
公共布尔值isEnabled(整型位置)
{
返回getItem(position).getAvailability().equals(“不可用”);
}
}
还要记住,
FirebaseListAdapter
具有通用参数类型。另外,请确保不要查看像timeTextV
或availabilityTextv
这样的视图,最好使用视图保持器模式。在isEnabled->adapter.getRef(位置)中这样做;获取项目,然后获取值并进行比较。请同时添加BookingTimes
类的内容。已添加BookingTimes类的内容
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp"
app:cardCornerRadius="5dp"
app:cardElevation="10dp"
app:cardBackgroundColor="@color/transparent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/timeTV"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:paddingStart="8dp"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:textSize="25sp"
tools:ignore="RtlSymmetry" />
<TextView
android:id="@+id/availabilityTV"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="5dp"
android:paddingEnd="8dp"
android:paddingBottom="5dp"
android:textSize="25sp"
tools:ignore="RtlSymmetry" />
</LinearLayout>
</androidx.cardview.widget.CardView>
public class BookingTimes
{
private String time;
private String availability;
public BookingTimes()
{
}
public BookingTimes(String Time, String Availability)
{
this.time = Time;
this.availability = Availability;
}
public String getTime()
{
return time;
}
public void setTime(String Time)
{
this.time = Time;
}
public String getAvailability()
{
return availability;
}
public void setAvailability(String Availability)
{
this.availability = Availability;
}
}
new FirebaseListAdapter<BookingTimes>(options)
{
...
@Override
public boolean isEnabled(int position)
{
return getItem(position).getAvailability().equals("Unavailable");
}
}