0

クラス ( A_Main.java) を拡張してArrayAdapterいます。ListViewそのまま使うA_Mainように設定しましたListAdapter。内部A_Main.getView()では、ビューを膨張させて、ListView各行のウィジェットを取得します。各行にはTextViewCheckBoxおよびが含まれますImageButton。をクリックするImageButtonと、 に関連付けられた曲を再生しますTextView。スクロールを手探りして新しい曲を再生するのは簡単すぎるので、 で使用onItemClickListener()したくありません。ListView

ImageButton新しい行をクリックするImageButtonと、現在再生中の曲のハイライトを解除し、新しい曲をハイライトする必要があります。onClickListener()その方法は、ImageButton のビューを膨張させ、リスト内のすべてのボタンのハイライトを解除してから、再生中のボタンをハイライトすることだと考えています。これについて最善の方法がわかりません。getView()A_Mainが各IDのメンバー リストを反復処理し、メモリ リークを発生させずに ID を直接参照できるようにすることはできますか? それらの ID は、使用が完了するとすぐに消えますか? 代替アプローチについて何か考えはありますか?ImageButtononClickListener()getView()

ここに画像の説明を入力

4

2 に答える 2

2

編集:

解決策はおそらく簡単です このようにブール配列をグローバルに取ります

 private final boolean[] selectedstates;

そして、コンストラクターでリストのサイズで初期化します

 selectedstates= new boolean[yourlist.size()];

そして、このように設定されたonclickリスナーの外側に

 yourbutton.setSelected(selectedstates[position]);

これがお役に立てば幸いです


これを試して

選択と非選択の 2 つの異なる状態イメージを持つカスタム セレクターを取得します。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/pause_button"
          android:state_selected="true" />
    <item android:drawable="@drawable/play_button" />
</selector>

1.グローバル変数を作成する

Imageview previous; 

カスタムアダプターで、コンテンツを取得するコンストラクターで初期化します

previous=new ImageView(context);

アダプターの getView() メソッドを追加すると、おそらく Imageview の onclickListener が次のようになります

 imagPlay.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
             ImageView current=((ImageView)v);
              current.setSelected(true);
              previous.setSelected(false);
              previous=current;
        }
    });

これは機能します。アプリで使用したので自信がありました。これがお役に立てば幸いです

于 2013-03-06T17:43:42.050 に答える
1

このビデオを見る必要があります。http://www.youtube.com/watch?v=wDBM6wVEO70。特に、ビューを再利用してメモリリークを回避するためのビューホルダー部分。リストビューの行ボタンを強調表示するには、クリックしたアイテムの位置を確認し、ボタンの背景を設定してボタンを強調表示します。

于 2013-03-06T17:30:10.033 に答える