2012-12-10 37 views
0

目前,填充时的列表以view @ @开头的底部开始。有没有办法使用listAdapters强制它到列表的顶部?Android ListAdapter start @ top

当前方向在创建时滚动到底部。当屏幕创建时,是否有办法将屏幕固定到顶部? http://imgur.com/wGTEy在这个例子中,你看到创建时的条目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

您可能填错了。检查mStrings存储你的字符串的顺序。 –

+0

你能给我们一些代码吗?所以我们可以给你答案,这将真正帮助你。 – ndsmyter

+0

字符串正确输入到mAdapter中,但方向始终显示列表中的“last”字符串。 –

回答

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()

+0

谢谢sam。这完美的工作,我想要的! –

1

您希望列表中后面的项目位于ListView的顶部吗?如果是这样,看看这个问题:Is it possible to make a ListView populate from the bottom?

+0

不,我希望列表视图始于顶端......当前方向在创建时滚动到底部。当屏幕创建时,是否有办法将屏幕固定到顶部? http://imgur.com/wGTEy在这个例子中,你看到创建时的条目1被向上推动以腾出空间给六个空间......相反,我希望它像这样填充。 http://imgur.com/6Lg6e ...条目1是列表的顶部,并且6被推到底部以滚动... –