13

いくつかのフラグメントを持つ 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) を直接ロードすることは可能ですか? もしそうなら、どのように?

4

3 に答える 3

34

によると: http://developer.android.com/reference/android/preference/PreferenceActivity.html#EXTRA_SHOW_FRAGMENT

public static final 文字列 EXTRA_SHOW_FRAGMENT

API レベル 11 で追加されました。このアクティビティを開始すると、呼び出し元のインテントにこの追加の文字列を含めて、最初に表示するフラグメントを指定できます。

定数値: ":android:show_fragment"

intent = new Intent( this, SettingsActivity.class );
intent.putExtra( PreferenceActivity.EXTRA_SHOW_FRAGMENT, Fragment1.class.getName() );
intent.putExtra( PreferenceActivity.EXTRA_NO_HEADERS, true );
于 2012-12-02T18:49:45.433 に答える
1

onCreateのPreferenceActivityPreferenceFragmentで以下のコードを使用するだけです

addPreferencesFromResource(R.xml.**YOUR PREFERENCE FRAGMENT XML**);
于 2014-08-19T06:33:14.090 に答える