我正在开发一个使用Listview Activity的音板应用程序。但由于Android的Listview具有回收其列表视图的属性,我对所选文本视图所做的更改会在滚动列表视图时反映在所有页面中。我不希望这种情况发生。那么我该如何正确处理呢。如果有人可以帮我解决代码片段,那将非常有用,我感谢您的努力。谢谢!
编辑:希望这能更好地解释
我的类扩展了ListActivity,listview如下
[Image] [Text]
[Image] [Text]
[Image] [Text]
现在,当用户点击任何文本视图时,我需要更改该textview的图像。我通过以下代码实现它。
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);
}
};
}
答案 0 :(得分:1)
简答:让列表的适配器处理数据更新以正确呈现更改。也就是说,如果需要,覆盖/编辑getView()方法以了解如何处理数据更改,编辑适配器下的数据,调用notifyDataSetChanged(),并在调用getView时让这些数据更改传播到视图。现在,您可能手动修改视图而不更改基础数据,这违反了MVC模式,无论视图回收位如何。
考虑到你问这个问题的一般程度,给你一个适合你特定情况的代码样本是相当困难的。