1

PreferencesScreen/PreferencesCategory (同じアクティビティ) の下にある複数の設定を有効/無効にするために使用したい ListPreference があります。

別の PreferenceScreen または PreferenceCategory の ListPreference 値に応じて、グループ化された設定を無効または有効にする簡単な方法はありますか?

同様の問題を生成する説明:

私はEclipseを使用していますが、同様の手順がAndroidスタジオに存在します。

  1. 新しいプロジェクトを作成し、[新規] -> [Android アプリケーション プロジェクト] -> このテスト プロジェクトの任意の名前を入力し、[次へ] をクリックして終了します。
  2. メニューに移動します:ファイル - >新規 - > Androidオブジェクトをクリックし、次に設定を選択し、次のように終了するまで次をクリックします。

ここに画像の説明を入力

ここに画像の説明を入力

ここに画像の説明を入力

終了をクリックした後、エラーが表示された場合は、メニューからプロジェクトを再コンパイルします: project -> clean 。

これで、作成されたプロジェクトに設定があり、onOptionsItemSelected メソッドの MainActivity.java に次のように 2 行を追加して呼び出すことができます。

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            Intent i = new Intent (this, SettingsActivity.class);
            startActivity(i);
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

アプリを実行し、アクションバーの設定をクリックして設定アクティビティを開きます

ここに画像の説明を入力

最後に設定が表示され、次の 3 つの設定画面が含まれます。

ここに画像の説明を入力

pref_general にある「友達をメッセージに追加」を見てください。ユーザーがその値を「never」に変更すると、pref_data_sync の下のすべての設定を無効にする必要がありますが、新しい値が「always」の場合、pref_notification のすべての設定を無効にする必要があります。それ以外の場合は、両方の画面設定ですべての設定を有効にします。

4

1 に答える 1

1

1.) に a を実装OnSharedPreferenceChangeListenerしますSettingsActivity.java

public class SettingsActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener
{

       //override this method
       public void onSharedPreferenceChanged (SharedPreferences  sharedPreferences, String key)
       {

       }    
}

2.) 次に、このメソッドで「友達を追加」プリファレンスの値を確認します。

public class SettingsActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener
{

       //override this method
       public void onSharedPreferenceChanged (SharedPreferences  sharedPreferences, String key)
       {

       String add_friends = PreferenceManager.getDefaultSharedPreferences(context).getString(
                            "add_friends", null);
       if(add_friends.equalsIgnoreCase("never")
       {
           // Get the screen you want to remove
           PreferenceScreen preferenceScreen = (PreferenceScreen) findPreference("pref_screen");


           //remove the other screens.  
           PreferenceGroup preferenceScreenParent = getParent(preferenceScreen);
           preferenceScreenParent.removePreference(preferenceScreen);
       }

       } 

}
于 2015-03-15T10:15:44.843 に答える