如何根据字符串值禁用列表视图项目?

问题描述 投票:1回答:1

我正在创建一个应用程序,它可以从firebase数据库中提取数据,并在一个自定义的列表视图中向用户展示。我想让它在一个列表项中,如果文本视图中包含 "不可用 "这个词,用户不应该无法选择该列表项。我怎样才能动态地实现这一点呢?

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);

自定义列表视图。

<?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>

BookingTimes类。

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;
    }
}

类:数据库。

enter image description here

应用程序。

enter image description here

android firebase listview android-listview
1个回答
1
投票

你必须直接在列表中使用项目的可用性。isEnabled(int).

new FirebaseListAdapter<BookingTimes>(options)
{
    ...

    @Override
    public boolean isEnabled(int position)
    {
        return getItem(position).getAvailability().equals("Unavailable");
    }
}

还请记住 FirebaseListAdapter 有一个通用的参数类型。另外,请确保不要像 timeTextVavailabilityTextv,最好是带有观景台图案。

© www.soinside.com 2019 - 2024. All rights reserved.