1

我遇到了 setViewBinder 的问题。

无法理解为什么它在日志中返回的不是一个值,而是几个。

当 DB 中没有数据时 - 什么都不返回,当 1 - 2 或 4 个值时,3-8/

为什么?

请帮忙。

 scAdapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() { 
         public boolean setViewValue(View view, Cursor cursor, int columnIndex) { 
             Log.i("mylog", "Let's work!"); 
         return false; 
         } 
  }); 

这是 ListView 的布局。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_margin="0dp"
    android:layout_marginBottom="0dp"
    android:layout_marginEnd="0dp"
    android:layout_marginLeft="0dp"
    android:layout_marginRight="0dp"
    android:layout_marginStart="0dp"
    android:layout_marginTop="0dp"
    android:gravity="center_horizontal"
    tools:context=".Main_year" >

    <ListView
        android:id="@+id/list_months"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignWithParentIfMissing="true"
        android:layout_below="@+id/imageButton3"
        android:textSize="50sp" >
    </ListView>

    <ImageButton
        android:id="@+id/imageButton3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="5dp"
        android:src="@drawable/month_icon_active"
        android:color="#FFFFFF" />

    <ImageButton
        android:id="@+id/imageButton1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/imageButton3"
        android:src="@drawable/day_icon"
        android:color="#FFFFFF" />

    <ImageButton
        android:id="@+id/imageButton2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/list_months"
        android:layout_alignRight="@+id/list_months"
        android:src="@drawable/year_icon"
        android:color="#FFFFFF" />

</RelativeLayout>

这是布局,它出现在列表视图的每个笔划中。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:orientation="horizontal" >

    <ImageView
        android:id="@+id/ivImg"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:src="@drawable/ic_launcher" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/tvText"
        android:layout_toRightOf="@+id/ivImg"
        android:text="xyz"
        android:textSize="12sp" />

    <TextView
        android:id="@+id/tvText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_toRightOf="@+id/ivImg"
        android:text="abc"
        android:textSize="26sp" />

</RelativeLayout>
4

1 回答 1

0

从源代码SimpleCursorAdapter

@Override
public void bindView(View view, Context context, Cursor cursor) {
    final ViewBinder binder = mViewBinder;
    final int count = mTo.length;
    final int[] from = mFrom;
    final int[] to = mTo;

    for (int i = 0; i < count; i++) {
        final View v = view.findViewById(to[i]);
        if (v != null) {
            boolean bound = false;
            if (binder != null) {
                // ViewBinder is called here!!
                bound = binder.setViewValue(v, cursor, from[i]);
            }

            if (!bound) {
                // code omited...
            }
        }
    }
}

为您的ViewBinder每一行的每个视图调用一次ListView。你的一行ListView包含三个视图,一个ImageView和两个TextView,如果你Cursor有两行,那么ViewBinder将被调用 6 次。这就是为什么你会看到这么多“让我们工作!”的原因。在 Logcat 中。

于 2013-10-24T22:14:42.107 回答