2

ここに画像の説明を入力

私たちのプロジェクトでは、wifi 設定に似た SwitchPreference を使用しています。ユーザーはトグル ボタンをクリックして値を切り替えることができ、ユーザーはタイトルをクリックしてより多くのオプションを表示できます。

しかし、これはロリポップでは機能しません。lollipop の動作に変化が見られます。

キットカットでは:

ユーザーがトグル ボタンをタップするとonPreferenceChangedコールバックが呼び出され、ユーザーがタイトルをタップするとonPreferenceClickedが呼び出されます。

lollipop の場合: トグル ボタンまたはタイトルをタップすると、 onPreferenceClickedが常に呼び出され、その後onPreferenceChangedが呼び出されます。ロリポップで同じ動作を得るにはどうすればよいですか? この動作は機能を壊しています。

4

2 に答える 2

0

回避策として、カスタム SwitchPreference クラスを作成しました

public class CustomSwitchPreference extends SwitchPreference {
public CustomSwitchPreference(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
}

public CustomSwitchPreference(Context context, AttributeSet attrs) {
    super(context, attrs);
}

public CustomSwitchPreference(Context context) {
    super(context);
}
 @Override
    protected View onCreateView(ViewGroup parent) {
        View view =  super.onCreateView(parent);
 LinearLayout switchView =  (LinearLayout) ((LinearLayout) view).getChildAt(2);
switchView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                final boolean newValue = !isChecked();
                if (callChangeListener(newValue)) {
                    setChecked(newValue);
                }
            }
        });
}

汚れているように見えますが、私のために働いています。

于 2015-06-22T14:24:57.693 に答える