从Android中的OnClickListener扩充ListView行?

时间:2013-03-06 17:25:52

标签: android listview

我有一个类A_Main.java)扩展ArrayAdapter。我将ListView设置为使用A_Main,因为它是ListAdapter。在A_Main.getView()内部,我对视图进行了充气,​​以获取每行的ListView小部件。每行包含TextViewCheckBoxImageButton。单击ImageButton后,我播放与TextView关联的歌曲。我不想在onItemClickListener()上使用ListView,因为它太容易弄乱滚动并开始播放新歌。

当我点击新行中的ImageButton时,我需要取消当前正在播放的歌曲ImageButton的声音,然后选择新歌曲。我想这样做的方法是在ImageButton的onClickListener()和un-hilite列表中的每个按钮中膨胀视图,然后,hi-lite正在播放的那个。我不确定最好的办法。我可以在每个A_Main ID的ImageButton中保留一个成员列表,因为getView()会迭代它们并直接从onClickListener()引用ID而不会导致内存泄漏吗? getView()完成后,这些ID是否会消失?关于替代方法的任何想法?

enter image description here

2 个答案:

答案 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部分重用视图并避免内存泄漏。要突出显示列表视图行按钮,请检查单击项目的位置,并通过设置按钮的背景来突出显示该按钮。