我有一个类A_Main.java
)扩展ArrayAdapter
。我将ListView
设置为使用A_Main
,因为它是ListAdapter
。在A_Main.getView()
内部,我对视图进行了充气,以获取每行的ListView
小部件。每行包含TextView
,CheckBox
和ImageButton
。单击ImageButton
后,我播放与TextView
关联的歌曲。我不想在onItemClickListener()
上使用ListView
,因为它太容易弄乱滚动并开始播放新歌。
当我点击新行中的ImageButton
时,我需要取消当前正在播放的歌曲ImageButton
的声音,然后选择新歌曲。我想这样做的方法是在ImageButton的onClickListener()
和un-hilite列表中的每个按钮中膨胀视图,然后,hi-lite正在播放的那个。我不确定最好的办法。我可以在每个A_Main
ID的ImageButton
中保留一个成员列表,因为getView()会迭代它们并直接从onClickListener()
引用ID而不会导致内存泄漏吗? getView()
完成后,这些ID是否会消失?关于替代方法的任何想法?
答案 0 :(得分:2)
编辑:
解决方案可能很简单像这样全局采取布尔数组
private final boolean[] selectedstates;
并使用构造函数中列表的大小初始化它
selectedstates= new boolean[yourlist.size()];
在onclick听众的外面设置像这样
yourbutton.setSelected(selectedstates[position]);
我希望这会对你有所帮助
试试这个
使用具有两个不同状态图像的自定义选择器进行选择和非选择
<?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;
}
});
这会有效,我很自信,因为我在我的应用中使用过它。我希望这会对你有所帮助
答案 1 :(得分:1)
应该看看这个视频。 http://www.youtube.com/watch?v=wDBM6wVEO70。特别是viewholder部分重用视图并避免内存泄漏。要突出显示列表视图行按钮,请检查单击项目的位置,并通过设置按钮的背景来突出显示该按钮。