0

そのため、expandablelistview をアプリケーションのエレガントなインターフェイスとして使用しようとしてきましたが、そこから必要な動作を抽出することに失敗し続けています。子をクリックすると、その背景を別の色に変更したり、テキストを別の色に変更したり、テキスト自体を変更したりすることさえできます。ただし、(子供が表示可能な領域を離れるように) スクロールしたり、グループを折りたたんだり展開したりすると、行った変更が頻繁に消えてしまいます。

では、そのような変更を子供に加えて定着させるにはどうすればよいでしょうか。ありがとう。

更新: ExpandableListAdapter の getChildView() メソッドをオーバーライドして、子ビューに適切な変更を加えると、(アダプターの notifyDataSetChanged() メソッドがなくても) 正常に機能することが判明しました。私の問題は、ばかげた状態の切り替えでした (onChildClick では正しいのですが、getChildView では逆になっています)。

4

2 に答える 2

0

Androidのリストビューは、によって触媒される非常に重要な手法を利用していconvertviewます。スクロール中にビューが画面外に出ると、データ部分が変更された状態で画面上の別の場所に配置されます。それは私たちが1000回のビューを作成するのを防ぎ、代わりに一度に画面に表示される約7または8ビューを作成します。ただし、これらのビューは目的の場所に簡単に戻らないため、暗黙的に発生させるのではなく、各位置で何が行われるかを指定する必要があります。

それで、それはどのようにキャッシュアウトしますか?配列リストまたは任意の種類のリストを作成して、色の状態を保持し、テキスト状態を任意のメソッドでタグ付けします(redは整数配列リストでは3に等しいか、red = "red"は文字列配列リストです)。次に、簡単getView()です。配列リスト内の対応する位置が何かを示している場合は、何かを実行するように指定します。notifydatasetchanged()ただし、リストビューを更新するには、を呼び出す必要もあります。getView()に境界がない場合は、不必要に大量に呼び出されるため、これをonclicklistenerなどに配置することをお勧めします。

次回、あなたは私にコードを見せてくれます、そして私はあなたにコードを見せます、さもなければ誰もあなたを助けたくないでしょう。これは不必要にたくさん尋ねられます

于 2012-11-07T17:57:40.230 に答える
0

グローバル変数の変更を次の場所に永続化する必要があります。

 public void onGroupCollapsed(int groupPosition) {
 {

次に、それらを変数から読み戻し、ビューに割り当てます

 public void onGroupExpend (int groupPosition) {
 }

または、子が作成されたとき:

public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
// assign new values / changes to your views before you return this view

return v;
}
于 2012-11-07T17:53:59.500 に答える