我正在尝试实现自定义多重对话框。我的目标是拥有一个包含标志和语言名称的列表。在对话框中,我希望能够选择多行。到目前为止我做到了这一点:
checkedItems = new boolean[languages.size()];
for (int i=0; i<languages.size(); i++) {
languages.get(i).selected = (selectedLangIndexes.contains(i));
checkedItems[i] = (selectedLangIndexes.contains(i));
}
final AlertDialog.Builder builder=new AlertDialog.Builder(this);
builder.setTitle("Select Languages");
builder.setPositiveButton("Save", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
selectedLangIndexes.clear();
for (int i=0; i<checkedItems.length; i++) {
languages.get(i).selected = false;
if (checkedItems[i]) {
selectedLangIndexes.add(i);
languages.get(i).selected = true;
}
}
// display my selected languages
dialog.dismiss();
}
});
LanguageAdapter adapter = new LanguageAdapter(this, R.layout.language_row, languages.toArray(new Language[languages.size()]));
DialogInterface.OnClickListener langClickListener = new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
checkedItems[which] = !checkedItems[which];
// ? update the clicked row here ?
}
};
builder.setSingleChoiceItems(adapter, -1, langClickListener);
AlertDialog alertDialog = builder.create();
alertDialog.show();
在LangAdapter的getView()方法中,我根据所选属性设置行的颜色:
if (items[position].selected) {
holder.txtTitle.setTextColor(context.getResources().getColor(R.color.lang_selected));
} else {
holder.txtTitle.setTextColor(context.getResources().getColor(R.color.lang_not_selected));
}
这个想法是让选定的语言显示一种颜色,而其他语言显示另一种颜色。在单击保存按钮后创建/重新打开对话框时,这对我有用。
但是如何在解除对话之前更新当前点击的项目(更改文本颜色)?
更新:adapter.notifyDataSetChanged();也不起作用。
答案 0 :(得分:0)
我不知道如何在对话框中动态更新列表。
所以在我的情况下,我解雇并再次打开对话框。 (我收到了具体phoe的关税)
你觉得怎么样?
答案 1 :(得分:0)
创建对话框后,我将OnItemClickListener设置为listView:
alertDialog = builder.create();
alertDialog.show();
alertDialog.getListView().setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View view, int pos, long id) {
checkedItems[pos] = !checkedItems[pos];
TextView tv = (TextView) view.findViewById(R.id.tvLanguageName);
if (checkedItems[pos]) {
tv.setTextColor(ThisClass.this.getResources().getColor(R.color.lang_selected));
} else {
tv.setTextColor(SubtitleSearcher.this.getResources().getColor(R.color.lang_not_selected));
}
}
});
以上方法:
DialogInterface.OnClickListener langClickListener(...)
可以删除。