6

私の問題はListView getChildAt が表示されている children に対して null を返すことに似ていますが、検索しても解決策が見つかりません。

私はListViewスクロールを持っています。にListViewは 10 個のアイテムがあり、スクロールによって 7 個が表示され、3 個が非表示になります。また、これからすべての子を取得する必要がある外部メソッド (アダプター外) もありますListView(例: を使用getChildAt())。

10 個すべての項目が必要ですが、最後の 3 つはnullオブジェクトです。次のようなコードを試しました。

getListView().smoothScrollToPosition();

しかし、これはうまくいきません。

説明がすべてを示しているので、残りのコードを投稿する必要はないと思いますか?

4

5 に答える 5

3

既に見たように、 a は表示されている行のビューのみを保持ListViewするため、aからすべての子行ビューを取得することはできませんListView(さらに、いくつかの再利用された行はありますが、それらに到達することはできません)。必要なことを行う正しい方法は、アダプターのデータにデータを格納し、そこから取得することです。

ただし、ListView は、実行時に RadioGroup からの現在の値を保持しません。

これにはいくつかの問題があることがわかったので、古いコードをいくつか修正して基本的な例を作成しました。コードはこちらにあります

于 2012-12-19T21:03:12.413 に答える
2

私はそうは思わないので、listViewのスクロールビューを追加する必要があります。スクロールはListViewで自動的に機能します。スクロールビューを追加せずにアプリケーションを試してみてください。必要に応じて機能すると確信しています。

于 2012-12-19T11:02:53.877 に答える
1

これらの子が null である理由は、それらが実際には存在せず、決して存在しないためです。一度に 7 つの子しか画面に表示されない場合、システムは 7 つだけを作成convertViewし、アダプターgetView()メソッドに back を渡すことによって再利用します。

データセット全体に関する情報を取得したい場合は、画面上のビューではなく、データセット自体を検索する必要があります。たとえば、ArrayAdapter の場合、配列をループします。CursorAdapter の場合は、カーソルをループします。等

于 2012-12-19T11:09:06.857 に答える
1

listView の非表示の子は実際には存在しません。それらが表示されると、冗長なビューの 1 つがリサイクルされるか、新しいビューが生成されます。したがって、実際にはすべてのビューにアクセスすることはできません。なぜしたいのですか?ビュー自体ではなく、ビューに入力するデータに変更を加える必要があります。

于 2012-12-19T11:13:38.550 に答える
0

注意が必要な点がいくつかあります。 1. リスト ビューにはスクロール機能が組み込まれているため、スクロール ビューは使用しないでください。それは物事を台無しにするだけです。2. リスト ビューにすべての子が含まれているわけではありません。スクロールすると、実行時に表示されるアイテムのみが作成されます。3. すべての子をまとめて取得したい場合は、リストにある子オブジェクトの ArrayList を保持することをお勧めします。必要に応じて、この ArrayList に子を追加または削除できます。

于 2014-07-23T10:21:44.097 に答える