【发布时间】:2012-01-11 21:43:13
【问题描述】:
我正在编写一个音乐播放器,它使用扩展 BaseAdapter(效率适配器)的自定义适配器,我想使用 setAdapter() 在 AlertDialog 中显示,用户可以单击其中一首歌曲切换到该位置在播放列表中或检查要从播放列表中删除的歌曲。我尝试使用自定义单击侦听器,以便用户只需长按即可从列表中删除该项目,但 listview 无法正常工作......它甚至删除了错误的项目(最后的项目)尽管ArrayList 包含正确的播放列表项目...(当我从ArrayList 中删除该项目时,我将它传递给名为notifyDataSetChanged 的适配器...但正如我提到的那样,这不起作用。 AlertDialog ListView... 肯定有一个错误,因为它没有理由从最后弹出结果而不是正确的项目。
所以...我想尝试的下一个方法是使用AlertDialog 的setMultiChoiceItems() 方法...但它似乎不适用于自定义适配器...只有简单的数组.我是否必须将AlertDialog 和Override 子类化为setMultiChoiceItems() 方法,或者有什么方法可以使它与ArrayAdapter 一起工作?
基本上,我不知道如何迭代AlertDialog 创建的列表,或者它是否以某种方式传递该视图。此外,如果我将这些添加到行中,我认为我什至无法听到对 checkboxes 的点击。任何帮助将不胜感激。
编辑:在这里提问就像魔术......我回答了我自己的问题......我就是这样做的。我为每个checkbox 添加了一个提示,这是ArrayList 中项目的位置。然后我使用OnCheckedChangeListener 来捕获选择。当您设置提示时,它会将文本添加到 checkbox... 因为 AlertDialog 的背景是白色的(即使对于单击的项目?)我只是将提示文本颜色设置为透明。
holder.check.setHintTextColor(Color.TRANSPARENT);
holder.check.setHint(String.valueOf(position));
holder.check.setOnCheckedChangeListener(new OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
int position = Integer.parseInt((String) buttonView.getHint());
Log.v("onCheckedChanged", "Checked: "+isChecked+" returned: "+position+" which should be "+getItem(position).name);
}
});
【问题讨论】:
-
您的问题由您自己回答。尝试复制/粘贴文本并正确使用答案机制。
标签: android android-alertdialog