0

現在、入力されたリストは、リストの下部にあるビューから始まります。listAdapters を使用して強制的にリストの一番上に表示する方法はありますか?

現在、向きは作成時に下にスクロールします。作成時に画面を上に固定する方法はありますか? http://imgur.com/wGTEyこの例では、作成時のエントリ 1 が上に押し出されて 6 つのスペースを確保していることがわかります... 代わりに、このように入力したいと思います。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());
               } 
           }
       }
   }

**!= 文字列エラーを修正するために編集。

4

2 に答える 2

1

リストの後半にある項目をListView?の一番上に配置します。もしそうなら、この質問をチェックしてください: Is it possible to make a ListView populate from the bottom?

于 2012-12-10T20:43:28.167 に答える
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 を使用することをお勧めしますが、それは大きなテーブル データをより適切に処理するためです。

を使用adapter.clear()adapter.add()て、すべてのステップで ListView 自体を再描画するように要求しています...潜在的に数十回または数百回。ArrayAdapter#notifyDataSetChanged()代わりに、ArrayList を直接操作してから、ループが完了した後に ListView に一度再描画するように依頼する必要があります。

于 2012-12-10T21:20:04.413 に答える