いくつかのフラグメントを持つ PreferenceActivity があります。
R.xml.preferences: (読みやすくするために短縮されています):
<?xml version="1.0" encoding="utf-8"?>
<preference-headers xmlns:android="http://schemas.android.com/apk/res/android">
<header android:fragment="fragments.Fragment1" android:id="@+id/fragment1" [...] />
<header android:fragment="fragments.Fragment2" android:id="@+id/fragment2" [...] />
[...]
</preference-headers>
設定アクティビティ:
public class SettingsActivity extends PreferenceActivity {
@Override
public void onBuildHeaders(List<Header> target) {
loadHeadersFromResource(R.xml.preferences, target);
}
}
fragments.Fragment1
これにより、 、fragments.Fragment2
、 ...SettingsActivity
が開始された場合のリスト エントリが表示されます。
しかし今、アクティビティの開始時に特定の PreferenceFragment が開かれるように Bundle を渡したいと思います。
だから私はこれをSettingsActivityに追加しました:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null && savedInstanceState.getBoolean("shortcut")) {
// directly jump to fragments.Fragment1
}
}
を介してフラグメントをロードしようとしましたgetFragmentManager().findFragmentById(R.id.fragment1)
が、これは を返しますnull
。しかし、正しいインスタンスがあったとしても、それを呼び出す方法がわかりません。また、呼び出しloadHeadersFromResource(R.xml.preferences_fragment1, target);
は機能しません - これにより、RuntimeException " XML document must start with tag; foundPreferenceScreen at Binary XML file " がスローされます。私にはアイデアが残っておらず、SO と Google で検索しても関連する結果が返されませんでした。
私の質問は次のとおりです。Activitiy の onCreate メソッドから PreferenceFragment (たとえば fragment.Fragment1) を直接ロードすることは可能ですか? もしそうなら、どのように?