86743


AndroidのPreference項目を動的に非表示にしたいです。

[code]

    <PreferenceScreen>
    ・・・
            <CheckBoxPreference
                android:key="test_key"
                android:defaultValue="true"
                android:title="@string/test_title" />
    ・・・
    </PreferenceScreen>
    
[/code]

上記の項目を  
コード上で非表示にしたいです。

[code]

    CheckBoxPreference test = getCheckBoxPrefInstance("test_key");
    if (test != null) {
        test.setSelectable(false);(1)
    //    test.setEnabled(false);(2)
    }
    
[/code]

(1)の場合は、活性のような表示ですが、タップができない状態  
(2)の場合は、非活性のような表示となっています。

<https://developer.android.com/guide/topics/ui/settings/customize-your-
settings?hl=ja>

[code]

    EditTextPreference signaturePreference = findPreference("signature");
    if (signaturePreference != null) {
        signaturePreference.setVisible(true);
    }
    
[/code]

上記のような記載があり、EditTextPreferenceですが、上記を見ますと「setVisible」を使用すれば良さそうなのですが、

[code]

    if (test != null) {
    //    test.setSelectable(false);(1)
    //    test.setEnabled(false);(2)
        test.setVisible(false);(3)
    }
    
[/code]

(3)とすると、setVisibleはCheckBoxPreferenceに見つからないと怒られてしまいます。  
チェックボックス項目を非表示にする方法はありますでしょうか？


CC BY-SA 4.0
2022-03-07T12:20:37.223
86740
2022-03-07T15:38:19.080
12842
question
android
AndroidのCheckBoxPreference項目を動的に非表示にしたい


公式リファレンス
[CheckBoxPreference](https://developer.android.com/reference/androidx/preference/CheckBoxPreference#inherited-
methods) に `setVisible(boolean visible)` は明記されています。

> setVisibleはCheckBoxPreferenceに見つからないと怒られてしまい

というのは、CheckBoxPreference という代物が `setVisible` というメソッドが使えないわけではなく、原因は全く別のところにある、
_使えるはずのものが使えなくなっている_ 、と考えた方がいいでしょう。

おそらく、`import` が適切にできていないのではないでしょうか。

`buile.gradle (:app)`

[code]

    implementation 'androidx.preference:preference:1.2.0' // Java
    
[/code]

または

[code]

    implementation 'androidx.preference:preference-ktx:1.2.0' // Kotlin Java 兼用
    
[/code]

そして import 文

[code]

    import androidx.preference.CheckBoxPreference;
    
[/code]

android **X** のものがちゃんと選択されているかどうか、確かめてください。

Fragment:

[code]

    public class MySettingsFragment extends PreferenceFragmentCompat {
        @Override
        public void onCreatePreferences(@Nullable Bundle savedInstanceState, @Nullable String rootKey) {
            setPreferencesFromResource(R.xml.preferences, rootKey);
            CheckBoxPreference check = findPreference("check");
            check.setVisible(false);
        }
    }
    
[/code]

preferences.xml

[code]

    <PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto">
        <CheckBoxPreference app:key="check" />
    </PreferenceScreen>
    
[/code]

こんな感じで何の問題もなく `setVisible` できています。


CC BY-SA 4.0
2022-03-07T15:38:19.080
86743
2022-03-07T15:38:19.080
7290
86740
answer