Вы должны использовать курсоры (если требуется контент-провайдеры) и ListActivity.Пользовательский интерфейс автоматически обновляется, как только появляются изменения, и в случае нулевых наборов данных в списке автоматически отображается соответствующее представление.
Следующие примеры решают его с помощью поставщиков содержимого:
main.xml:
<ListView android:id="@id/android:list" android:layout_width="fill_parent"
android:layout_height="wrap_content"></ListView>
<TextView android:id="@id/android:empty" android:layout_width="fill_parent"
android:gravity="center" android:layout_height="wrap_content"
android:text="No data, please refresh!" />
Обратите внимание на android: список и android: пустые теги.Это требуется для действия со списком.
В методе onCreate ():
mCursor = getContentResolver().query(SOME_URI,
null, null, null, null);
ListView mListView = (ListView) findViewById(android.R.id.list);
mListView.setAdapter(new CustomCusorAdapter(getApplicationContext(),
mCursor));
Вы можете использовать SimpleCursorAdapter, если ваши представления просты.Я создал собственный адаптер из-за сложных представлений:
private class CustomCusorAdapter extends CursorAdapter {
public CustomCusorAdapter(Context context, Cursor c) {
super(context, c);
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
Holder holder = (Holder) view.getTag();
holder.tv.setText(cursor.getString(cursor
.getColumnIndex(COL1_NAME)));
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
View v = getLayoutInflater().inflate(
R.layout.layout_xml, null);
Holder holder = new Holder();
holder.tv = (TextView) v
.findViewById(R.id.tv);
holder.cb= (CheckBox) v
.findViewById(R.id.cb);
v.setTag(holder);
return v;
}
}
private class Holder {
TextView tv;
CheckBox cb;
}