单击后自定义多重对话/更新列表行

时间:2014-04-10 12:41:53

标签: android android-dialog android-dialogfragment

我正在尝试实现自定义多重对话框。我的目标是拥有一个包含标志和语言名称的列表。在对话框中,我希望能够选择多行。到目前为止我做到了这一点:

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();也不起作用。

2 个答案:

答案 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(...)

可以删除。