0

我有一个类 ( A_Main.java) 扩展ArrayAdapter。我将我设置为按原样ListView使用。在里面我膨胀视图以获取每一行的小部件。每行包含一个,和一个。单击时,我播放与. 我不想在 上使用,因为摸索滚动并开始播放新歌太容易了。A_MainListAdapterA_Main.getView()ListViewTextViewCheckBoxImageButtonImageButtonTextViewonItemClickListener()ListView

当我ImageButton在新行中单击一个时,我需要取消ImageButton当前正在播放的歌曲的隐藏,并取消新的歌曲。我在想这样做的方法是膨胀 ImageButton 中的视图onClickListener()并取消列表中的每个按钮,然后,hi-lite 正在播放的按钮。我不确定解决这个问题的最佳方法。我可以在A_Main每个ImageButtonID 中保留一个成员列表,因为 getView() 对其进行迭代并直接从中引用 IDonClickListener()而不会导致内存泄漏?这些 ID 会在处理完后立即消失getView()吗?关于替代方法的任何想法?

在此处输入图像描述

4

2 回答 2

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() 方法,您可能会有一个 onclickListener 为您的 Imageview 做这样

 imagPlay.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
             ImageView current=((ImageView)v);
              current.setSelected(true);
              previous.setSelected(false);
              previous=current;
        }
    });

这会奏效,我很自信,因为我已经在我的应用程序中使用了它。我希望这能帮到您

于 2013-03-06T17:43:42.050 回答
1

应该看看这个视频。http://www.youtube.com/watch?v=wDBM6wVEO70。特别是 viewholder 部分可以重用视图并避免内存泄漏。要突出显示列表视图行按钮,请检查您单击的项目的位置,并通过设置按钮的背景突出显示该按钮。

于 2013-03-06T17:30:10.033 回答