我的Android应用程序中有一个ListFragment,它从我的sqlite数据库中获取数据。
布局如下所示:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ll_main"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="10dp">
<ImageView android:id="@+id/iv_fav"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="true"
android:paddingRight="10dp"/>
<TextView android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Sample Data"
android:textSize="17sp"
android:layout_toRightOf="@id/iv_fav"/>
<TextView
android:id="@+id/tv_verz"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Verzeichnis:"
android:textSize="12sp"
android:layout_below="@id/tv_title"
android:layout_toRightOf="@id/iv_fav"/>
<TextView android:id="@+id/tv_folder"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Sample Data"
android:textSize="12sp"
android:paddingLeft="5dp"
android:layout_toRightOf="@id/tv_verz"
android:layout_below="@id/tv_title"/>
</RelativeLayout>
ImageView iv_fav是可点击的,应该更新数据库值。如果它的1应该为0,否则为0。 我想用这个代码:
private void displayListView(View view) {
Cursor cursor = dbHelper.fetchAllBooks();
String[] columns = new String[] {
BookDbAdapter.KEY_TITLE,
BookDbAdapter.KEY_FOLDER,
BookDbAdapter.KEY_FAV
};
int[] to = new int[] {
R.id.tv_title,
R.id.tv_folder,
R.id.iv_fav
};
dataAdapter = new SimpleCursorAdapter(getActivity(), R.layout.single_row_item, cursor, columns, to, 0);
dataAdapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() {
@Override
public boolean setViewValue(View view, final Cursor cursor, final int columnIndex) {
if (columnIndex == cursor.getColumnIndex(BookDbAdapter.KEY_FAV)) {
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int columnIndexId = cursor.getColumnIndex(BookDbAdapter.KEY_ROWID);
int columnIndexFav = cursor.getColumnIndex(BookDbAdapter.KEY_FAV);
Toast.makeText(getActivity(), "star clicked! " + cursor.getInt(columnIndexId), Toast.LENGTH_SHORT).show();
int starred = 0;
if (cursor.getInt(columnIndexFav) == 0) {
starred = 1;
ImageView img = (ImageView) v;
img.setImageDrawable(getResources().getDrawable(R.drawable.star_on));
} else {
ImageView img = (ImageView) v;
img.setImageDrawable(getResources().getDrawable(R.drawable.star_off));
}
dbHelper.setFav(cursor.getInt(columnIndexId), starred);
}
});
ImageView img = (ImageView) view;
if (cursor.getInt(4) == 1) {
img.setImageDrawable(getResources().getDrawable(R.drawable.star_on));
return true;
} else {
img.setImageDrawable(getResources().getDrawable(R.drawable.star_off));
return true;
}
}
return false;
}
});
setListAdapter(dataAdapter);
}
现在的问题是,cursor.getInt(columnIndexId)没有从数据库中提供正确的ID。我是否点击了数据库中id为1的第一项,我得到了12。与第二项相同,应该是2,但是我得到12.第三项,应该是3,我得到12.我是否在我的列表中更进一步,比如第10项,我得到16回,而不是之后的几项18岁,等等...
为什么?我做错了什么?我真的不明白......