Я работаю с базой данных, и я пытаюсь заполнить ListView каждой строкой таблицы. Я успешно создал и запросил данные, но я не могу заставить ничего появляться в ListView с помощью SimpleCursorAdapter.SimpleCursorAdapter для заполнения ListView
public class History extends ListActivity {
SQLiteDatabase db;
DbHelper DbHelper;
ListView lv;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.history);
DbHelper = new DbHelper(this);
db = DbHelper.getWritableDatabase();
lv = getListView();
final String[] from = { DbHelper.TYPE, DbHelper.TITLE, DbHelper.CONTENT };
final String[] column = { DbHelper.C_ID, DbHelper.TYPE, DbHelper.TITLE,
DbHelper.CONTENT };
final int[] to = { R.id.list_row_title, R.id.list_row_content };
Cursor cursor = db.query(DbHelper.TABLE_NAME, column, null, null, null,
null, null);
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
R.layout.history_list_row, cursor, from, to);
lv.setAdapter(adapter);
/*
* Display as Toast for development purposes
*/
// move to first row
cursor.moveToFirst();
// move to the next item each time
while (cursor.moveToNext()) {
// get string and column index from cursor
String name = cursor
.getString(cursor.getColumnIndex(DbHelper.TYPE));
String title = cursor.getString(cursor
.getColumnIndex(DbHelper.TITLE));
String content = cursor.getString(cursor
.getColumnIndex(DbHelper.CONTENT));
Toast.makeText(this,
"Title: " + title + "\n" + "Content: " + content,
Toast.LENGTH_SHORT).show();
}
cursor.close();
}
}
Это мой пользовательский ListView строка для отображения 3 строк из базы данных
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
android:id="@+id/list_row_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Title"
android:textAppearance="?android:attr/textAppearanceLarge" />
<TextView
android:id="@+id/list_row_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Content"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/list_row_type"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Type"
android:textAppearance="?android:attr/textAppearanceSmall" />
Сообщения Тост появляются отлично, но ничего не появляется в ListView.
Я не думаю, что вам следует возиться, а тем более закрыть курсор вне адаптера, поскольку он помешает позиции курсора и загрузке данных. Закрытый курсор не будет хорош внутри вашего адаптера. – ebarrenechea
Вы можете передать 'null' в [' changeCursor (Cursor) '] (http://developer.android.com/reference/android/widget/CursorAdapter.html#changeCursor (android.database.Cursor)), если вы не используете ' Это нужно больше. Если вы используете ['LoaderCallbacks'] (http://developer.android.com/reference/android/app/LoaderManager.LoaderCallbacks.html), вы можете вызвать его в [' onLoaderReset() '] (http: // разработчик .android.com/reference/android/app/LoaderManager.LoaderCallbacks.html # onLoaderReset (android.content.Loader)). В противном случае не закрывайте курсор вне адаптера. Адаптер управляет самим курсором. –
2013-02-22 01:05:00