我已经尝试了所有可能的.setEmptyView建议,但不适合我,我认为由于我的代码中的事实,listview是以编程方式而不是通过xml创建的。
我不知道如何在xml中设置一个没有listview的空状态消息。 任何人?谢谢!
我的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();
}
}
}
已解决,其他线程中显示的解决方法(如下面的“我是Frogatto”建议),在onCreate下我写道:
TextView emptyView = new TextView(this);
((ViewGroup) getListView().getParent()).addView(emptyView);
emptyView.setText("It's empty!");
getListView().setEmptyView(emptyView);
编辑:请留下这个帖子,这是正确答案而不是主要问题/问题的重复。当我搜索这个时,没有实际的情况,ppl没有在XML中使用列表,所以这有一个非常不同的标题,并且由所有其他线程构成一个明显不同的情况,所以再次,只有解决方案是共同的
答案 0 :(得分:1)
您可以通过两种方法将空视图添加到您的活动中。
保留使用ListActivity并执行此答案中建议的解决方法:
不使用ListActivity
并使用常规活动,并在XML文件中定义ListView
和空视图。
在我看来,后者更好,因为使用前一种方法可能会导致您的应用不一致,因为ListActivity
的较新版本的Android结构可能会发生变化。