0

私は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) 

ありがとう、

\^/病気

4

1 に答える 1

0

これが私が問題に取り組む方法です:

ステップ1:スタンドアロンの使い捨てテストアクティビティでこれを機能させます。好みを忘れてください。ダイアログを忘れてください。CHOICE_MODE_MULTIPLE ListView特定の数の項目がチェックされた後、チェックされていない項目が無効になるという機能に注目してください。

ステップ2:カスタムウィジェットの形式で機能するステップ1の機能を取得します。これは、ステップ1から必要なものすべてを焼き付けるサブクラスListView(おそらく...それ以上のものがある場合はコンテナになる可能性があります)を実装することを意味します。ListView

ステップ3:DialogPreferenceステップ2のカスタムウィジェットを使用するカスタムサブクラスを作成します。

たとえば、これは、カスタムウィジェットをロールインしたサンプルプロジェクトです。ColorMixerColorPreference

于 2010-10-08T20:35:38.783 に答える