【问题标题】:Setting Android ListActivity starting position设置 Android ListActivity 起始位置
【发布时间】:2011-08-24 12:29:43
【问题描述】:

我在 ListActivity 中显示来自 SQLite 的数据。用户可以单击列表元素,将其发送到更新数据库的 Activity。

更新 Activity 完成后,用户会被送回原来的 ListActivity。

当用户从 ListActivity 返回时,我希望将 ListView 定位为显示她刚刚更新的数据(例如,在可能的第一个位置)。

我尝试将光标定位到我想要显示的条目;但这似乎不起作用(请参阅下面的代码以获取代码示例)。

protected void onResume() {
    super.onResume();
    mDbCursor = mDbAdapter.getCursor();
    long id = getIntent().getLongExtra(FIRST_ID, -1); // Id of updated row.
    while (mDbCursor.moveToNext() && getId(mDbCursor) != id) {
    }
    .
    . calling setListAdapter(SimpleCursorAdapter);
    .
}

我认为光标在退出 while 循环后定位到正确的行。

【问题讨论】:

  • 下面推荐getListView().setSelection(int position)的两个答案都让我走上了正轨。我实际上最终将当前位置从 ListActivity 传递给了更新 Activity。然后更新活动将当前位置传回给 ListActivity。这节省了对 Cursor 的循环,并且可以正常工作,因为不会对 DB 表进行添加或删除。

标签: android android-listview simplecursoradapter


【解决方案1】:

您是否尝试过在您的 ListActivity 上使用 getListView().setSelection(int position)position 参数从列表的 0 开始,因此它与您的 id 变量不同,但在您的 while 循环中,您可以在遍历 Cursor 并将其用作位置时从零开始计数。

【讨论】:

  • 谢谢@joel。不知何故,我错过了 API 的那一部分!
【解决方案2】:

不考虑光标初始位置。您必须使用 listView.setSelection(int position),并根据您的 id 获取位置:

for (int position = 0; mDbCursor.moveToNext() && getId(mDbCursor) != id; position++) {}
setListAdapter(SimpleCursorAdapter);
getListView.setSelection(position);

【讨论】:

  • 谢谢@njzk2。不知何故,我错过了 API 的那一部分!
猜你喜欢
  • 2014-07-29
  • 1970-01-01
  • 2013-01-20
  • 1970-01-01
  • 1970-01-01
  • 2017-09-13
  • 1970-01-01
  • 2021-04-30
  • 1970-01-01
相关资源
最近更新 更多