目前填充的列表是从列表底部的@视图开始的。有没有办法使用listAdapters强制它到列表的顶部?
目前,方向在创建时滚动到底部。有没有办法在屏幕创建时将其固定在顶部? http://imgur.com/wGTEy在这个示例中,您看到create上的条目1被向上推,以便为六个腾出空间......相反,我希望它像这样填充。 http://imgur.com/6Lg6e ...条目1是列表的顶部,6被推到底部以进行滚动。
如果您查看上面的图片,您会发现它从列表的底部而不是顶部开始。任何想法?
mAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mStrings);
setListAdapter(mAdapter);
registerForContextMenu(getListView());
populateFields();
private void populateFields() {
if (mRowId != null) {
Cursor note = mDbHelper.fetchDaily(mRowId);
startManagingCursor(note);
String body = note.getString(note.getColumnIndexOrThrow(NotesDbAdapter.KEY_DBODY));
mAdapter.clear();
if (!(body.trim().equals(""))){
String bodysplit[] = body.split(",");
for (int i = 0; i < bodysplit.length; i++) {
mAdapter.add(bodysplit[i].trim());
}
}
}
}
**编辑修复!=字符串错误。
答案 0 :(得分:1)
您希望列表中稍后的项目位于ListView
的顶部吗?如果是,请查看以下问题:Is it possible to make a ListView populate from the bottom?
答案 1 :(得分:0)
您正在彻底更改适配器,因此在此过程中滚动位置会丢失...您可以使用:
ListView listView = getListView();
int position = listView.getFirstVisiblePosition();
if (!(body.trim().equals(""))){
String bodysplit[] = body.split(",");
for (int i = 0; i < bodysplit.length; i++) {
mAdapter.add(bodysplit[i].trim());
}
}
listView.setSelection(position);
但这并不完美,如果在position
索引关闭之前添加一行。如果您的列表包含唯一值,则可以使用ArrayAdapter#getPosition()
来查找新索引。
虽然我仍然建议使用CursorAdapter,因为它更好地处理大型表数据,我想用ArrayAdapter代码解决效率问题。
通过使用adapter.clear()
和adapter.add()
,您要求ListView在每一步重绘自己...可能数十次或数百次。相反,你应该直接使用ArrayList,然后在循环完成后让ListView用ArrayAdapter#notifyDataSetChanged()
重绘一次。