android设置空列表消息没有xml列表

时间:2016-01-18 21:17:08

标签: android listview message

我已经尝试了所有可能的.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中使用列表,所以这有一个非常不同的标题,并且由所有其他线程构成一个明显不同的情况,所以再次,只有解决方案是共同的

1 个答案:

答案 0 :(得分:1)

您可以通过两种方法将空视图添加到您的活动中。

  • 保留使用ListActivity并执行此答案中建议的解决方法:

  • 不使用ListActivity并使用常规活动,并在XML文件中定义ListView和空视图。

在我看来,后者更好,因为使用前一种方法可能会导致您的应用不一致,因为ListActivity的较新版本的Android结构可能会发生变化。