在Android中从OnClickListener膨胀ListView行?
我有一个类(在Android中从OnClickListener膨胀ListView行?,android,listview,Android,Listview,我有一个类(a_Main.java)扩展了ArrayAdapter。我将我的ListView设置为使用A_Main作为ListAdapter。在A_Main.getView()内部我对视图进行充气,以获得每行的列表视图小部件。每行包含一个文本视图,复选框和一个图像按钮。单击图像按钮时,我播放与文本视图相关联的歌曲。我不想在ListView上使用onItemClickListener() 当我单击新行中的ImageButton时,我需要取消当前播放歌曲的ImageButton,并取消新歌曲的hil
a_Main.java
)扩展了ArrayAdapter
。我将我的ListView
设置为使用A_Main
作为ListAdapter
。在A_Main.getView()内部
我对视图进行充气,以获得每行的列表视图
小部件。每行包含一个文本视图
,复选框
和一个图像按钮
。单击图像按钮
时,我播放与文本视图
相关联的歌曲。我不想在ListView
上使用onItemClickListener()
当我单击新行中的ImageButton
时,我需要取消当前播放歌曲的ImageButton
,并取消新歌曲的hilite。我在想这样做的方法是在ImageButton的onClickListener()
中放大视图,取消列表中的每个按钮,然后hi-lite正在播放的按钮。我不知道最好的办法是什么。当getView()在每个ImageButton
ID上迭代并直接从onClickListener()
引用ID时,我是否可以在每个ImageButton
ID的a_Main
中保留成员列表,而不会导致内存泄漏?当getView()
处理完这些ID后,这些ID会立即消失吗?对其他方法有什么想法吗
你应该看看这段视频。尤其是viewholder部件,它可以重用视图并避免内存泄漏。要突出显示listview行按钮,请检查单击的项目的位置,并通过设置按钮的背景来突出显示该按钮。应查看此视频。尤其是viewholder部件,它可以重用视图并避免内存泄漏。要突出显示listview行按钮,请检查单击的项目的位置,并通过设置按钮的背景来突出显示该按钮。编辑:
解决方案可能很简单,全局采用布尔数组,如下所示
private final boolean[] selectedstates;
yourbutton.setSelected(selectedstates[position]);
imagPlay.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ImageView current=((ImageView)v);
current.setSelected(true);
previous.setSelected(false);
previous=current;
}
});
并使用构造函数中列表的大小初始化它
selectedstates= new boolean[yourlist.size()];
在onclick侦听器的外部设置如下
private final boolean[] selectedstates;
yourbutton.setSelected(selectedstates[position]);
imagPlay.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ImageView current=((ImageView)v);
current.setSelected(true);
previous.setSelected(false);
previous=current;
}
});
我希望这对你有帮助
试试这个
使用具有两个不同状态图像的自定义选择器进行选择和非选择
<?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>
在自定义适配器中,并在将获取内容的构造函数中初始化它
previous=new ImageView(context);
在adapter getView()方法中添加Imageview可能会有一个onclickListener
你喜欢这样吗
private final boolean[] selectedstates;
yourbutton.setSelected(selectedstates[position]);
imagPlay.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ImageView current=((ImageView)v);
current.setSelected(true);
previous.setSelected(false);
previous=current;
}
});
这将起作用,我很自信,因为我已经在我的应用程序中使用了它。我希望这将帮助您编辑:
解决方案可能很简单,全局采用布尔数组,如下所示
private final boolean[] selectedstates;
yourbutton.setSelected(selectedstates[position]);
imagPlay.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ImageView current=((ImageView)v);
current.setSelected(true);
previous.setSelected(false);
previous=current;
}
});
并使用构造函数中列表的大小初始化它
selectedstates= new boolean[yourlist.size()];
在onclick侦听器的外部设置如下
private final boolean[] selectedstates;
yourbutton.setSelected(selectedstates[position]);
imagPlay.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ImageView current=((ImageView)v);
current.setSelected(true);
previous.setSelected(false);
previous=current;
}
});
我希望这对你有帮助
试试这个
使用具有两个不同状态图像的自定义选择器进行选择和非选择
<?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>
在自定义适配器中,并在将获取内容的构造函数中初始化它
previous=new ImageView(context);
在adapter getView()方法中添加Imageview可能会有一个onclickListener
你喜欢这样吗
private final boolean[] selectedstates;
yourbutton.setSelected(selectedstates[position]);
imagPlay.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ImageView current=((ImageView)v);
current.setSelected(true);
previous.setSelected(false);
previous=current;
}
});
这将起作用,我很自信,因为我已经在我的应用程序中使用了它。我希望这将有助于您使用可拖动选择器怎么样?选择器不会保持状态。它仅对单击/触摸时的按钮动画有用。除非有其他方法?使用可绘制选择器怎么样?选择器不会保持状态。它仅对单击/触摸时的按钮动画有用。除非有别的办法?谢谢!一个很棒的解决方案!经过一些测试后,ListView在滚动时没有正确更新按钮状态。有些按钮显示为选中,但尚未选中。您在getView()中使用了什么来更正按钮状态?嘿,很抱歉回复得太晚,因为印度是晚上,所以我昨天去睡觉了……我会更新答案……没问题。有趣的我最终实现了与你建议的完全相同的东西。谢谢你的跟进。谢谢!一个很棒的解决方案!经过一些测试后,ListView在滚动时没有正确更新按钮状态。有些按钮显示为选中,但尚未选中。您在getView()中使用了什么来更正按钮状态?嘿,很抱歉回复得太晚,因为印度是晚上,所以我昨天去睡觉了……我会更新答案……没问题。有趣的我最终实现了与你建议的完全相同的东西。谢谢你的关注。谢谢,很棒的视频!我已经实现了它所讨论的ViewHolder类。我一直怀疑持续的findViewById()调用会影响性能,但我从来不知道该怎么办。谢谢,很棒的视频!我已经实现了它所讨论的ViewHolder类。我一直怀疑常量findviewbyd()调用会影响性能,但我从来不知道该怎么办。