SettingsActivityはどのクラスに適用されますか?
AppCompatActivity
の拡張機能が有効でした。
static final String ANIMATION = "animation" ;
static final String COUNTDOWN_ON_OFF = "countdown_on_off";
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
if (getFragmentManager().findFragmentById(android.R.id.content) == null)
{
getFragmentManager().beginTransaction().add(android.R.id.content, new Prefs()).commit();
}
}
私は好みのヘッダに関連するすべての生成されたコードを追い出さ、私のPreferenceFragment
public static class Prefs extends PreferenceFragment
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
// Bind the summaries of EditText/List/Dialog/Ringtone preferences
// to their values. When their values change, their summaries are
// updated to reflect the new value, per the Android Design
// guidelines.
// findPreference() uses android:key like in preferences.xml !
bindPreferenceSummaryToValue(findPreference(ANIMATION));
}
}
私の静的メソッドのために(Androidのメーカーはいくつかの以前のバージョンで生成された)いくつかのテンプレートメソッド/変数を保持しましたActivity
クラス(テンプレートから適合)。アクションバーを除く -
/**
* A preference value change listener that updates the preference's summary
* to reflect its new value.<br>
* template by Android Studio minus Ringtone Preference
*/
private static Preference.OnPreferenceChangeListener sBindPreferenceSummaryToValueListener = new Preference.OnPreferenceChangeListener()
{
@Override
public boolean onPreferenceChange(Preference preference, Object value)
{
String stringValue = value.toString();
if (preference instanceof ListPreference)
{
// For list preferences, look up the correct display value in
// the preference's 'entries' list.
ListPreference listPreference = (ListPreference) preference;
int index = listPreference.findIndexOfValue(stringValue);
// Set the summary to reflect the new value.
preference.setSummary(
index >= 0
? listPreference.getEntries()[index]
: null);
}
else if (preference instanceof RingtonePreference)
{
// my app didn't need that
return true;
}
else if (preference instanceof CheckBoxPreference)
{
Context ctx = preference.getContext();
boolean isChecked = (Boolean) value;
if (preference.getKey().equals(ANIMATION))
{
preference.setSummary(isChecked ? ctx.getString(R.string.sOn) : ctx.getString(R.string.sOff));
}
else if (preference.getKey().equals(COUNTDOWN_ON_OFF))
{
preference.setSummary(isChecked ? ctx.getString(R.string.sWhenPaused) : ctx.getString(R.string.sNever));
}
}
else
{
// For all other preferences, set the summary to the value's
// simple string representation.
preference.setSummary(stringValue);
}
return true;
}
};
}
これは動作します:
そして最後に、(また、テンプレートから適応)
Activity
でPreference.OnPreferenceChangeListener
などの静的変数は:あなたは他の好みのタイプをチェックすることもできます不足している。 SettingsActivity.onCreate()では、アクティビティがAndroidManifest.xmlにアクションバーを持つMainActivityの子として設定されていても、getSupportActionBar()を呼び出すとnullが返されます。私はまた、SettingsFragment.onCreate()でsetHasOptionsMenu()を呼び出しますが、おそらくそれは疑問です。あなたはどのようにActionBarを表示できますか? – Phil@ Phil - デフォルトではActionBarを持つActivity型を使用しました。 ActionBarを設定する必要がある場合は、MainActivityからその部分をコピーし、フラグメントをR.id.contentに入れずにツールバーの下のコンテナに配置する必要があります。他のフラグメント – 0X0nosugar
ありがとう@ 0X0nosugar私がこのような基本的な質問をする理由は、Android Studioによって挿入されたSettingsActivityを使用しており、ツールバーを拡張する必要もなく、XMLフラグメントを定義したり、その位置を指定したりもしないということです。getSupportActionBar()を呼び出して取得します。 My SettingsActivityは、それに基づいてgetSupportActionBar()を呼び出し、nullを取得します。私は重要なロジックをどこか外してしまったか、見出しスタイルの設定に暗黙的なActionBarの処理が含まれています。 – Phil