私は1週間以上かけて、限定マルチセレクションプリファレンスリストを作成する方法を見つけようとしました。私が試したことは何もありません。一見シンプルに見えるものがとても難しい場合、私はAndroidをあきらめる準備ができています。私は長い間プログラミングをしてきましたが、このようなものにひどく殴られたことを覚えていません。私は基本的なことを理解していないと思い込まなければなりません。誰かが私を正しい方向に向けてくれることを願っています。
これが私が考えることができる最も単純なコードで、うまくいくはずです。falseに設定してもチェックボックスがクリアされないので、trueも試してみました。なぜそれが機能しないのですか?それがうまくいかない場合は、どうしますか?
どんな助けでも大歓迎です。
@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)
ありがとう、
\^/病気