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 的结构可能会发生变化。