如何调用从preferenceActivity特定preferenceFragment? [英] How do I call a specific PreferenceFragment from a PreferenceActivity?

查看:237
本文介绍了如何调用从preferenceActivity特定preferenceFragment?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有几个片段一preferenceActivity:

R.xml preferences:(简称为更好的可读性):

 < XML版本=1.0编码=UTF-8&GT?;
< preference报头的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android>
    <头安卓碎片=fragments.Fragment1机器人:ID =@ + ID /片段1[...] />
    <头安卓碎片=fragments.Fragment2机器人:ID =@ + ID / fragment2[...] />
    [...]
< / preference报头>
 

SettingsActivity

 公共类SettingsActivity扩展preferenceActivity {
    @覆盖
    公共无效onBuildHeaders(名单<头>目标){
        loadHeadersFromResource(R.xml preferences,目标);
    }
}
 

这将显示一个列表条目 fragments.Fragment1 fragments.Fragment2 ,...如果 SettingsActivity 已启动。

但现在我想通过一个包,这样在启动活动时,一个特定的preferenceFragment打开:

所以我说这为 SettingsActivity

  @覆盖
公共无效的onCreate(包savedInstanceState){
    super.onCreate(savedInstanceState);
    如果(savedInstanceState = NULL和放大器;!&安培; savedInstanceState.getBoolean(快捷方式)){
        //直接跳到fragments.Fragment1
    }
}
 

我试图加载通过片段getFragmentManager()。findFragmentById(R.id.fragment1),但这个回报率。但是,即使我有正确的情况下,我不知道如何调用它。此外,调用 loadHeadersFromResource(R.xml preferences_fragment1,目标); 不工作 - 这将抛出一个RuntimeException的 XML文件必须以标签;发现preferenceScreen在二进制XML文件的。我没有留下意见,也对SO和谷歌搜索没有找到任何相关的结果。

所以我的问题是:是否有可能直接从Activitiy的onCreate方法加载一个preferenceFragment(如fragments.Fragment1)?如果是这样,怎么样?

解决方案

据: <一href="http://developer.android.com/reference/android/$p$pference/$p$pferenceActivity.html#EXTRA_SHOW_FRAGMENT">http://developer.android.com/reference/android/$p$pference/$p$pferenceActivity.html#EXTRA_SHOW_FRAGMENT

  

公共静态最后弦乐EXTRA_SHOW_FRAGMENT

     

加在API级别11时启动该活动中,调用意向   可以包含这种额外的字符串来指定哪些片段要   初步显示出来。

     

常数值::机器人:show_fragment

 意图=新的意图(这一点,SettingsActivity.class);
intent.putExtra(preferenceActivity.EXTRA_SHOW_FRAGMENT,Fragment1.class.getName());
intent.putExtra(preferenceActivity.EXTRA_NO_HEADERS,真正的);
 

I have a PreferenceActivity with several fragments:

R.xml.preferences: (shortened for better readability):

<?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>

SettingsActivity:

public class SettingsActivity extends PreferenceActivity {
    @Override
    public void onBuildHeaders(List<Header> target) {
        loadHeadersFromResource(R.xml.preferences, target);
    }
}

This will show a list entry with fragments.Fragment1, fragments.Fragment2, ... if SettingsActivity is started.

But now I want to pass a Bundle such that a specific PreferenceFragment is opened when starting the activity:

so I added this to SettingsActivity:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (savedInstanceState != null && savedInstanceState.getBoolean("shortcut")) {
        // directly jump to fragments.Fragment1
    }
}

I tried to load the fragment via getFragmentManager().findFragmentById(R.id.fragment1), but this returns null. But even if I had the correct instance, I would not know how to invoke it. Also, calling loadHeadersFromResource(R.xml.preferences_fragment1, target); does not work - This will throw a RuntimeException "XML document must start with tag; foundPreferenceScreen at Binary XML file". I have no ideas left and also a search on SO and Google did not return any relevant results.

So my question is: Is it possible to directly load a PreferenceFragment (e.g. fragments.Fragment1) from the Activitiy's onCreate method? If so, how?

解决方案

According to: http://developer.android.com/reference/android/preference/PreferenceActivity.html#EXTRA_SHOW_FRAGMENT

public static final String EXTRA_SHOW_FRAGMENT

Added in API level 11 When starting this activity, the invoking Intent can contain this extra string to specify which fragment should be initially displayed.

Constant Value: ":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 );

这篇关于如何调用从preferenceActivity特定preferenceFragment?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆