2

ListviewActivityを使用するサウンドボードアプリケーションを開発しています。ただし、Androidのリストビューにはリストビューをリサイクルするプロパティがあるため、選択したテキストビューに加えた変更は、リストビューをスクロールしているときにすべてのページに反映されます。私はこれが起こらないようにしたい。では、どうすれば適切に処理できますか。誰かがコードスニペットを手伝ってくれるなら、それは本当に役に立ちます。あなたの努力に感謝します。ありがとうございました!

編集:これがよりよく説明されることを願っています

私のクラスはListActivityを拡張し、リストビューは次のとおりです

[Image] [Text]
[Image] [Text]
[Image] [Text]

これで、ユーザーがテキストビューをクリックしたときに、そのテキストビューの画像を変更する必要があります。次のコードで実装します。

public void onItemClick(AdapterView<?> parent, View view,
           int position, long id) {

TextView tv = (TextView) view;
//Here I change the image with tv as reference
final Resources res = getBaseContext().getResources();
    final Drawable myImage = res.getDrawable(R.drawable.pause);
  //  myImage.
    final Drawable myImage1 = res.getDrawable(R.drawable.play);

    tv.setCompoundDrawablesWithIntrinsicBounds(myImage, null, null, null);

    MediaPlayer.OnCompletionListener listener = new MediaPlayer.OnCompletionListener(){
      public void onCompletion(MediaPlayer mp) {

         tv.setCompoundDrawablesWithIntrinsicBounds(myImage1, null, null, null);


      }
    };
}
4

1 に答える 1

1

簡単な答え:変更を正しくレンダリングするために、リストのアダプターにデータの更新を処理させます。つまり、必要に応じてgetView()メソッドをオーバーライド/編集して、データ変更の処理方法を確認し、アダプターの基になるデータを編集し、notifyDataSetChanged()を呼び出し、getViewが呼び出されたときにそれらのデータ変更をビューに伝播させます。現在、基になるデータを変更せずにビューを手動で変更している可能性があります。これは、ビューのリサイクルビットに関係なくMVCパターンに違反します。

ただし、一般的に質問をしたことを考えると、特定のケースに適合するコードサンプルを提供するのはかなり難しいでしょう。

于 2010-12-09T07:46:14.333 に答える