2

私はインターネットで何時間も検索しましたが、これまでのところ実質的なものは何も見つかりませんでした. 私がやりたいのは、複数選択の設定ビューです。これは、最後のアイテムを無効にし、それがもう単独ではない場合は再度有効にします。

私はこれまで、スーパークラスのフォースを使用して、そこにあるプライベート変数を読み取り、独自のonPrepareDialogBuilder(AlertDialog.Builder builder). OnMultiChoiceClickListenerアイテムが1つしか残っていない瞬間に、飛び込む独自の構成です。ここでの問題は、プライベート変数の強制読み取りの悪い習慣を使用していることと、チェックボックス項目を取得する方法とそれを無効にする方法がこれまでのところわからないことです。しかし、Android SDK をさらに詳しく調べると、この問題は解決すると思います。

最後に、何も機能しないOnPreferenceChangeListener場合は、ユーザーが選択したアイテムが 1 つ未満の場合にトーストを表示するために上書きを実行することで問題を解決します。しかし、使いやすさは高い価値があり、獲得する必要があり、多くの場合簡単ではありません。

どうも。

import android.content.Context;
import android.preference.MultiSelectListPreference;
import android.util.AttributeSet;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import georg.com.flironetest_01.Variables.Units;

/**
 * Created by Georg on 16/03/16.
 */
public class UnitMultipleSelectorPreference extends MultiSelectListPreference {

    public UnitMultipleSelectorPreference(Context context, AttributeSet attrs) {
        super(context, attrs);

        List<CharSequence> humanU = new ArrayList<>();
        List<CharSequence> machineU = new ArrayList<>();

        Units[] all = Units.values(); // Units is a enum with a rewriten to string statement.
        for (Units elem : all) {
            humanU.add(elem.toString());
            machineU.add(elem.name());
        }

        setEntries(humanU.toArray(new CharSequence[humanU.size()]));
        setEntryValues(machineU.toArray(new CharSequence[machineU.size()]));

        Set<String> mU = new HashSet<>();
        mU.add(Units.C.name());
        mU.add(Units.K.name());

        setDefaultValue(mU);
    }
}
4

2 に答える 2

0

本当に簡単な解決策は、setOnPreferenceChangeListener を設定し、新しい値が空になる場合に false を返すことです。
すべてのコードは onCreatePreferences に入れられます。

MultiSelectListPreference infoPreference = findPreference("information");

infoPreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
            @Override
            public boolean onPreferenceChange(Preference preference, Object newValue) {
                if (size(newValue) == 0){
                    return false;
                }
                return true;
            }
        });
于 2021-02-24T18:51:06.787 に答える