1

現在setContentView、リストフラグメントを含むレイアウトのアクティビティがあります。基本的にリストビューをロードします。

私のアクションバーには、さまざまなリストをロードできるスピナーが含まれています。バックグラウンドでリスト オブジェクトをロードし、ユーザーがスピナー オプションを使用してそれらのリストに切り替えたときに、1 つのフラグメントのアダプターを更新するだけで済みます。しかし、これはユーザーがスクロールした位置を保持しません。

複数のリストフラグメントの読み込みをいじりたいのですが、ユーザーが別のスピナー オプションを選択すると、その特定のリストに関連付けられた他のリストフラグメントの 1 つを表示するフラグメント トランザクションが発生します。

これを行うにはどうすればよいですか? また、ホスト アクティビティを変更するにはどうすればよいですか?

私が見た例では、ホスト アクティビティFragmentTransactionのメソッドですべてのフラグメントを作成onCreateし、XML ではフラグメントを作成しませんでした。現在、XML に 1 つのフラグメントがあり、実質的に同一の ListFragment をさらに 2 つ作成する必要があります。

洞察力に感謝

4

2 に答える 2

1

ここからListViewをプログラムでスクロールできるようです:

それぞれ直接/スムーズスクロールの場合:

 getListView().setSelection(21);

 getListView().smoothScrollToPosition(21);

ListView の getView メソッドでは、最後にレンダリングされたビューの位置を記録できます

 @Override
 public View getView(int position, View arg1, ViewGroup arg2) {
 // TODO Auto-generated method stub

したがって、リストビューをリセットすると、スクロール位置の整数レコードを保持するだけで、ユーザーがいた前の位置にスクロールできます。

フラグメント ソリューションも検討されていると思います。「置換」メソッドにより、置換されたフラグメントがそのビューを破壊することを私は知っています(少なくとも「サポート」フラグメントがそれを処理する方法です)。したがって、そのシナリオでは、スクロール状態を失ったリストビューにまだ戻っています。ビューとスクロール状態を保持する可能性があるため、フラグメントトランザクションの非表示/表示を試すことができます。

非表示/表示を試したら、結果を教えてください:) うまくいけば、自分で使用するかもしれません。

于 2014-03-04T20:52:23.927 に答える