【问题标题】:Hide an element of ListView's item depending on Cursor's column value根据 Cursor 的列值隐藏 ListView 项的元素
【发布时间】:2011-02-11 19:28:45
【问题描述】:

我有一个 CursorAdapter 类的孩子,以及一个 ListView,其中每个项目都有两个 TextView。一个拿着文字,一个拿着数字。

文本来自一个光标列,而数字来自另一列。如果数字等于 0,我想隐藏它。

我的列表项视图是:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:padding="10dp">

    <TextView
        android:background="@drawable/task_count_indicator"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:layout_alignParentRight="true"
        android:layout_gravity="center_vertical"
        android:textColor="@color/white"
        android:id="@+id/txtTaskCount" />

    <TextView
        android:layout_height="fill_parent"
        android:layout_width="fill_parent"
        android:ellipsize="marquee"
        android:textSize="18sp"
        android:layout_alignParentLeft="true"
        android:layout_gravity="center_vertical"
        android:id="@+id/placeItemName"/>

</RelativeLayout>

我的适配器代码是:

    @Override
    public View newView(Context context, Cursor cursor, ViewGroup viewGroup) {
        return LayoutInflater.from(context).inflate(R.layout.places_list_item, viewGroup, false);
    }


    @Override
    public void bindView(View view, Context context, Cursor cursor) {

        int taskCount = cursor.get...// get to know it...

        TextView name = (TextView) view.findViewById(R.id.placeItemName);
        name.setText(
                cursor.getString(
                        cursor.getColumnIndexOrThrow(...)));

        TextView count = (TextView)view.findViewById(R.id.txtTaskCount);
        if(taskCount > 0)
            count.setText(Integer.toString(taskCount));
        else
            count.setVisibility(View.GONE);
    }

问题是有时每个包含数字的视图都被隐藏起来,或者值不正确(文本内容总是正确的)。我记录了taskCount 的值——它总是正确的。

我还注意到,如果我注释 if 语句并始终将文本分配给 count,就像这样:

    //if(taskCount > 0)
        count.setText(Integer.toString(taskCount));
    //else
        //count.setVisibility(View.GONE);

问题没有重现。

【问题讨论】:

    标签: android android-listview


    【解决方案1】:

    我认为您的问题与taskCound&gt;0 的情况有关 您应该需要指定count.setVisibility(View.Visible),因为视图正在被重用。因此,请务必为每种情况定义您的值。

    希望有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-06
      • 2013-10-11
      • 1970-01-01
      • 1970-01-01
      • 2021-04-09
      • 2016-10-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多