2

我正在开发一个使用 Listview Activity 的音板应用程序。但是由于 Android 的 Listview 具有回收其列表视图的属性,因此我对所选文本视图所做的更改会在滚动列表视图时反映在所有页面中。我不希望这种情况发生。那么我该如何正确处理呢。如果有人可以帮助我提供代码片段,那将非常有帮助,我感谢您的努力。谢谢!

编辑:希望这会更好地解释

我的类扩展了 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 回答