我正在开发一个音板应用程序,在其中使用 Listview Activity。但是由于Android的Listview具有回收其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);
}
};
}
简短的回答:让列表的适配器处理数据更新以正确呈现更改。也就是说,如果需要了解如何处理数据更改,请重写/编辑 getView() 方法,编辑适配器底层的数据,调用 notificationDataSetChanged(),并在调用 getView 时让这些数据更改向下传播到视图。现在,您可能正在手动修改视图而不更改底层数据,这违反了 MVC 模式,无论视图回收位如何。
不过,考虑到您提出这个问题的普遍性,为您提供适合您的特定情况的代码示例将相当困难。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)