今回はレイアウトがより複雑だったので、リストビューの getView が複数回実行されることに気づきませんでした。テスト中にブレークポイントの追跡に行ったところ、同じデータが繰り返し実行されていることがわかりました。おかしいと思ったのでネットで調べてみました。インターネット上の説明も基本的に同じで、ListView をレイアウトするときに高さも幅も fill_parent ではないため、高さの計算と更新が継続的に行われます。または、その親コンテナが fill_parent に設定されていません。
レイアウトが複雑すぎる場合、fill_parent に従ってすべてを調整するのは非現実的です。そこで私は、高さを動的に固定するという別の解決策を考えました。
プログラム実行後、ListViewの高さを固定し、Item情報を初期化します。
private void fixedListView(){ listView = (ListView) findViewById(R.id.listview); ViewGroup.LayoutParams params = listView.getLayoutParams(); layout = (HorizontalScrollView) findViewById(R.id.layout); params.height = layout.getHeight(); //需要设置的listview的高度,你可以设置成一个定值,也可以设置成其他容器的高度,如果是其他容器高度,那么不要在oncreate中执行,需要做延时处理,否则高度为0 listView.setLayoutParams(params); }
このようにして、ListView の更新速度が大幅に高速化されたことがわかりました。同僚は、Item のテキスト入力 EditText に addTextChangedListener(new TextWatcher() のリスナーがある場合) にリスニング コードが複数回実行される問題も解決しました。
ListView の複数回の更新の問題の解決策に関するその他の関連記事については、 Android および getView の繰り返し実行については、PHP 中国語 Web サイトに従ってください