Android 如何基于字符串值禁用列表视图项?

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

我正在创建一个应用程序,该应用程序从firebase数据库中提取数据,并以自定义listview的形式呈现给用户。我想这样做,在列表项中,如果textview包含单词“Unavailable”,用户不应该无法选择该列表项。如何动态地实现这一点

Java代码:

    @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");
    }
}