我已经扩展了 SimpleCursorAdapter 并且遇到了一个奇怪的 bindView 问题,它似乎在第一行被调用了两次。
只有第一行似乎是重复的。我感觉它与光标的定位方式有关,但是查看了所有适配器类,似乎无法找到发生这种情况的位置。
这是我的 bindView 代码,我插入了一些日志来显示我所看到的。
@Override
public void bindView(View view, Context context, Cursor cursor) {
final ViewBinder binder = getViewBinder();
final int count = mTo.length;
final int[] from = mFrom;
final int[] to = mTo;
Log.v("builder", "cursor count"+cursor.getCount() );
Log.v("builder", "mTo.length"+count);
//Bind all Views
for (int i = 0; i < count; i++) {
final View v = view.findViewById(to[i]);
if (v != null) {
boolean bound = false;
if (binder != null) {
bound = binder.setViewValue(v, cursor, from[i]);
}
if (!bound) {
String text = cursor.getString(from[i]);
v.setVisibility(View.VISIBLE);
if (text == null && !(v instanceof ImageView)) {
text = "";
v.setVisibility(View.GONE);
}
if (v instanceof TextView) {
setViewText((TextView) v, text);
if (v instanceof EditText){
EditText et = (EditText) v;
Log.v("builder", "setting up edittext"+cursor.getPosition()+i);
// setUpEditors(view, et);
}
} else if (v instanceof ImageView) {
setViewImage((ImageView) v, text);
} else {
throw new IllegalStateException(v.getClass().getName() + " is not a " +
" view that can be bound by this SimpleCursorAdapter");
}
}
}
}
}
这是我的输出,光标中只有一项
06-22 15:15:03.797: V/builder(27573): cursor count1
06-22 15:15:03.797: V/builder(27573): mTo.length5
06-22 15:15:03.807: V/builder(27573): setting up edittext02
06-22 15:15:03.807: V/builder(27573): setting up edittext03
06-22 15:15:03.807: V/builder(27573): setting up edittext04
06-22 15:15:03.887: V/builder(27573): cursor count1
06-22 15:15:03.887: V/builder(27573): mTo.length5
06-22 15:15:03.897: V/builder(27573): setting up edittext02
06-22 15:15:03.897: V/builder(27573): setting up edittext03
06-22 15:15:03.907: V/builder(27573): setting up edittext04
这里有 2 件商品
06-22 15:17:28.337: V/builder(27573): cursor count2
06-22 15:17:28.337: V/builder(27573): mTo.length5
06-22 15:17:28.337: V/builder(27573): setting up edittext02
06-22 15:17:28.337: V/builder(27573): setting up edittext03
06-22 15:17:28.337: V/builder(27573): setting up edittext04
06-22 15:17:28.417: V/builder(27573): cursor count2
06-22 15:17:28.417: V/builder(27573): mTo.length5
06-22 15:17:28.417: V/builder(27573): setting up edittext02
06-22 15:17:28.427: V/builder(27573): setting up edittext03
06-22 15:17:28.427: V/builder(27573): setting up edittext04
06-22 15:17:28.517: V/builder(27573): cursor count2
06-22 15:17:28.517: V/builder(27573): mTo.length5
06-22 15:17:28.527: V/builder(27573): setting up edittext12
06-22 15:17:28.527: V/builder(27573): setting up edittext13
06-22 15:17:28.527: V/builder(27573): setting up edittext14
这是ListView所在的xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" android:orientation="vertical">
<TextView
android:id="@+id/textView6"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/labels_background"
android:text="@string/lb_item_type"
android:textSize="@dimen/dm_maint_tv" />
<CheckBox
android:id="@+id/mt_base"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/lb_base" />
<TextView
android:id="@+id/textView10"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:background="@color/labels_background"
android:text="@string/lb_build"
android:textSize="@dimen/dm_maint_tv" />
<FrameLayout
android:layout_width="match_parent"
android:layout_height="0dp" android:layout_weight="1" android:id="@+id/builder">
<ListView
android:id="@+id/mt_build_list"
android:layout_width="match_parent"
android:layout_height="match_parent">
</ListView>
<ImageView
android:id="@+id/mt_additem"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="3dp"
android:layout_marginTop="3dp"
android:scaleType="centerInside"
android:src="@drawable/ic_input_add" android:layout_gravity="top|right"/>
</FrameLayout>