2014-04-10 97 views
0

我試圖實現一個自定義的多選擇對話框。我的目標是製作一個帶有標誌和語言名稱的列表。在對話框中,我希望能夠選擇多行。到目前爲止,我做到了這一點:點擊後自定義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();也不起作用。

回答

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

可以被刪除。

0

我不知道如何動態更新對話框中的列表。
所以在我的情況下,我解僱並再次打開對話框。 (我收到具體phoe的關稅)
您怎麼看?

+0

不,這會創建一個醜陋的動畫。 – Dusan

+0

同意你的看法...... –

+0

我寧願更新適配器並將其設置爲構建器,但不知道如何。 – Dusan