我花了一個多星期的時間試圖找出一種方法來做一個有限多選擇偏好列表。我沒有嘗試過的作品。如果看似簡單的事情如此艱難,我準備放棄Android。我一直在編程很長一段時間,不記得被這樣的事情打得這麼糟糕。我必須假設我不瞭解一些基本的東西。我希望有人能指出我正確的方向。Android:onPrepareDialogBuilder,onClick&setItemChecked
這是我能想到的最簡單的代碼,應該可以工作。即使設置爲false,它也不會清除複選框,我也嘗試過。爲什麼這不起作用?如果這不起作用,會發生什麼?
任何幫助將不勝感激。
@Override
protected void onPrepareDialogBuilder(Builder builder)
{
CharSequence[] entries = getEntries();
CharSequence[] entryValues = getEntryValues();
if (entries == null || entryValues == null || entries.length != entryValues.length) {
throw new IllegalStateException(
"ListPreference requires an entries array and an entryValues array which are both the same length");
}
// Added by WJT since we are loading the entries values after instantiation
// we need the clicked indexes to be setup now, they would not have been
// set up in the constructor
if ((mClickedDialogEntryIndices == null) || (mClickedDialogEntryIndices.length == 0))
mClickedDialogEntryIndices = new boolean[getEntries().length];
restoreCheckedEntries();
builder.setMultiChoiceItems(entries, mClickedDialogEntryIndices,
new DialogInterface.OnMultiChoiceClickListener()
{
public void onClick(DialogInterface dialog, int which, boolean val)
{
mDlg = (AlertDialog)getDialog();
mListView = (ListView)mDlg.getListView();
if (val)
{
if (mSelectedCount < mLimit)
{
mClickedDialogEntryIndices[which] = val;
mSelectedCount++;
}
else
{
mListView.setItemChecked(which, false);
Toast.makeText(getContext(),
R.string.newsLimitExceededMessage,
Toast.LENGTH_LONG).show();
} // (mSelectedCount < mLimit)
}
else
{
mClickedDialogEntryIndices[which] = val;
mSelectedCount--;
} // (val)
} // void onClick(DialogInterface dialog, int which, boolean val)
}); // DialogInterface.OnMultiChoiceClickListener()
} // void onPrepareDialogBuilder(Builder builder)
感謝,
\ ^/-111
什麼,確切地說,是「一個有限的多選擇偏好列表」?什麼,特別是,不工作?你期望的行爲是什麼?你有沒有考慮過使用'Dialog'爲主題的'Activity',你有更多的靈活性? – CommonsWare 2010-10-07 22:20:58
@CommonsWare:我試圖完成的是一個首選項,它允許用戶從預先定義的列表中選擇多個項目。我想限制選擇這些項目的數量。我的首選是在達到限制時禁用所有未選定的項目,並保持所選項目的啓用。我會解決爲每個複選框超過限制與消息給用戶。 – 2010-10-08 19:46:13
@CommonsWare:我試圖建立一個ListView,當我嘗試將它附加到Preferences子系統時,它將執行這個主要部分,但沒有成功。這與我對單獨的活動有所接近。 在上面的代碼中,我只是試圖取消選中一個超出預設的允許複選框限制的複選框。它不會取消選中複選框。 – 2010-10-08 19:48:46