0

我花了一个多星期的时间试图找出一种方法来做一个有限的多选偏好列表。我尝试过的没有任何效果。如果看似简单的事情如此困难,我已经准备好放弃 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 中获取以自定义小部件形式工作的功能。通过这个,我的意思是你将实现一个子类ListView(我猜......可能是一些容器,如果它比一个更多ListView),它包含你从第 1 步开始需要的所有东西。

第 3 步:创建一个DialogPreference使用第 2 步中的自定义小部件的自定义子类。

例如,这是一个示例项目,其中我有一个自定义ColorMixer小部件,卷入一个ColorPreference.

于 2010-10-08T20:35:38.783 回答