android 设置没有 xml 列表的空列表消息
android set empty list message with no xml list
我已经尝试了所有可能的 .setEmptyView 建议,但对我不起作用,我认为这是因为在我的代码中列表视图是以编程方式创建的,而不是通过 xml。
我不知道如何设置 xml 中没有列表视图的空状态消息。
任何人?谢谢!
我的 MainActivity 代码是:
public class MainActivity extends ListActivity {
// Declare Variables
public static final String ROW_ID = "row_id";
private static final String TITLE = "title";
private ListView noteListView;
private CursorAdapter noteAdapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Locate ListView
noteListView = getListView();
// Prepare ListView Item Click Listener
noteListView.setOnItemClickListener(viewNoteListener);
noteListView.setBackgroundColor(Color.parseColor("#0b4cb6"));
//noteListView.setEmptyView(findViewById(android.R.id.empty));
// Map all the titles into the ViewTitleNotes TextView
String[] from = new String[] { TITLE };
int[] to = new int[] { R.id.ViewTitleNotes };
// Create a SimpleCursorAdapter
noteAdapter = new SimpleCursorAdapter(MainActivity.this,
R.layout.list_note, null, from, to);
// Set the Adapter into SimpleCursorAdapter
setListAdapter(noteAdapter);
}
// Capture ListView item click
OnItemClickListener viewNoteListener = new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// Open ViewNote activity
Intent viewnote = new Intent(MainActivity.this, ViewNote.class);
// Pass the ROW_ID to ViewNote activity
viewnote.putExtra(ROW_ID, arg3);
startActivity(viewnote);
}
};
@Override
protected void onResume() {
super.onResume();
// Execute GetNotes Asynctask on return to MainActivity
new GetNotes().execute((Object[]) null);
}
@Override
protected void onStop() {
Cursor cursor = noteAdapter.getCursor();
// Deactivates the Cursor
if (cursor != null)
cursor.deactivate();
noteAdapter.changeCursor(null);
super.onStop();
}
// Create an Actionbar menu
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Menu Title
menu.add("Add item")
.setOnMenuItemClickListener(this.SaveButtonClickListener)
.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
return super.onCreateOptionsMenu(menu);
}
// Capture menu item click
OnMenuItemClickListener SaveButtonClickListener = new OnMenuItemClickListener() {
public boolean onMenuItemClick(MenuItem item) {
// Open AddEditNotes activity
Intent addnote = new Intent(MainActivity.this, AddEditNotes.class);
startActivity(addnote);
return false;
}
};
// GetNotes AsyncTask
private class GetNotes extends AsyncTask<Object, Object, Cursor> {
DatabaseConnector dbConnector = new DatabaseConnector(MainActivity.this);
@Override
protected Cursor doInBackground(Object... params) {
// Open the database
dbConnector.open();
return dbConnector.ListAllNotes();
}
@Override
protected void onPostExecute(Cursor result) {
noteAdapter.changeCursor(result);
// Close Database
dbConnector.close();
}
}
}
SOLVED 解决方法显示在另一个线程中(如下 "Hi I'm Frogatto" 建议),在 onCreate 下我写道:
TextView emptyView = new TextView(this);
((ViewGroup) getListView().getParent()).addView(emptyView);
emptyView.setText("It's empty!");
getListView().setEmptyView(emptyView);
编辑:请离开这个线程,这是一个重复的正确答案,而不是主要 issue/question。当我搜索这个时,没有人没有在 XML 中使用列表的实际情况,所以它有一个非常不同的标题,并且由所有其他线程构成明显不同的情况,所以再次,只有解决方案是共同的。
您有两种选择可以将空视图添加到 Activity。
使用 ListActivity 保留并执行此答案中建议的解决方法:
- Want to setEmptyView() of a ListActivity
不使用 ListActivity
而使用常规活动,并在 XML 文件中定义 ListView
和空视图。
在我看来,后者更好,因为使用前一种方法可能会导致您的应用出现不一致,因为 Android 的新版本 ListActivity
的结构可能会发生变化。
我已经尝试了所有可能的 .setEmptyView 建议,但对我不起作用,我认为这是因为在我的代码中列表视图是以编程方式创建的,而不是通过 xml。
我不知道如何设置 xml 中没有列表视图的空状态消息。 任何人?谢谢!
我的 MainActivity 代码是:
public class MainActivity extends ListActivity {
// Declare Variables
public static final String ROW_ID = "row_id";
private static final String TITLE = "title";
private ListView noteListView;
private CursorAdapter noteAdapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Locate ListView
noteListView = getListView();
// Prepare ListView Item Click Listener
noteListView.setOnItemClickListener(viewNoteListener);
noteListView.setBackgroundColor(Color.parseColor("#0b4cb6"));
//noteListView.setEmptyView(findViewById(android.R.id.empty));
// Map all the titles into the ViewTitleNotes TextView
String[] from = new String[] { TITLE };
int[] to = new int[] { R.id.ViewTitleNotes };
// Create a SimpleCursorAdapter
noteAdapter = new SimpleCursorAdapter(MainActivity.this,
R.layout.list_note, null, from, to);
// Set the Adapter into SimpleCursorAdapter
setListAdapter(noteAdapter);
}
// Capture ListView item click
OnItemClickListener viewNoteListener = new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// Open ViewNote activity
Intent viewnote = new Intent(MainActivity.this, ViewNote.class);
// Pass the ROW_ID to ViewNote activity
viewnote.putExtra(ROW_ID, arg3);
startActivity(viewnote);
}
};
@Override
protected void onResume() {
super.onResume();
// Execute GetNotes Asynctask on return to MainActivity
new GetNotes().execute((Object[]) null);
}
@Override
protected void onStop() {
Cursor cursor = noteAdapter.getCursor();
// Deactivates the Cursor
if (cursor != null)
cursor.deactivate();
noteAdapter.changeCursor(null);
super.onStop();
}
// Create an Actionbar menu
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Menu Title
menu.add("Add item")
.setOnMenuItemClickListener(this.SaveButtonClickListener)
.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
return super.onCreateOptionsMenu(menu);
}
// Capture menu item click
OnMenuItemClickListener SaveButtonClickListener = new OnMenuItemClickListener() {
public boolean onMenuItemClick(MenuItem item) {
// Open AddEditNotes activity
Intent addnote = new Intent(MainActivity.this, AddEditNotes.class);
startActivity(addnote);
return false;
}
};
// GetNotes AsyncTask
private class GetNotes extends AsyncTask<Object, Object, Cursor> {
DatabaseConnector dbConnector = new DatabaseConnector(MainActivity.this);
@Override
protected Cursor doInBackground(Object... params) {
// Open the database
dbConnector.open();
return dbConnector.ListAllNotes();
}
@Override
protected void onPostExecute(Cursor result) {
noteAdapter.changeCursor(result);
// Close Database
dbConnector.close();
}
}
}
SOLVED 解决方法显示在另一个线程中(如下 "Hi I'm Frogatto" 建议),在 onCreate 下我写道:
TextView emptyView = new TextView(this);
((ViewGroup) getListView().getParent()).addView(emptyView);
emptyView.setText("It's empty!");
getListView().setEmptyView(emptyView);
编辑:请离开这个线程,这是一个重复的正确答案,而不是主要 issue/question。当我搜索这个时,没有人没有在 XML 中使用列表的实际情况,所以它有一个非常不同的标题,并且由所有其他线程构成明显不同的情况,所以再次,只有解决方案是共同的。
您有两种选择可以将空视图添加到 Activity。
使用 ListActivity 保留并执行此答案中建议的解决方法:
- Want to setEmptyView() of a ListActivity
不使用
ListActivity
而使用常规活动,并在 XML 文件中定义ListView
和空视图。
在我看来,后者更好,因为使用前一种方法可能会导致您的应用出现不一致,因为 Android 的新版本 ListActivity
的结构可能会发生变化。