我試圖實現一個自定義的多選擇對話框。我的目標是製作一個帶有標誌和語言名稱的列表。在對話框中,我希望能夠選擇多行。到目前爲止,我做到了這一點:點擊後自定義multichoice對話框/更新列表行
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));
}
這樣做是爲了使所選擇的語言用一種顏色顯示,其他顏色用另一種顏色顯示。這對我來說,當我點擊保存按鈕後,對話框被創建/重新打開。
但是我怎樣才能更新當前點擊的項目(改變textcolor)解散對話框之前?
UPDATE:adapter.notifyDataSetChanged();也不起作用。
不,這會創建一個醜陋的動畫。 – Dusan
同意你的看法...... –
我寧願更新適配器並將其設置爲構建器,但不知道如何。 – Dusan