gpt4 book ai didi

android - 如何在 Android 上创建 Preference Activity 和 Preference Fragment?

转载 作者:IT王子 更新时间:2023-10-29 00:02:48 28 4
gpt4 key购买 nike

在学习旧教程 (Créez des applications pour Android -> openclassroom) 时,我被 PreferenceActivity 类中的这个已弃用的方法 addPreferencesFromResource(int id) 卡住了。

所以我的问题是:

What is the new way of creating Preferences in Android ?

最佳答案

我发现这篇文章 (What to use instead of “addPreferencesFromResource” in a PreferenceActivity?) 帮助我了解您必须通​​过 PreferenceFragment为了做到这一点。

在下面的解释中我使用 your.package.只是为了表明您必须输入包名。每个人都有自己的包,所以请用你的包替换它。

开始吧:


1。偏好 fragment

  • 创建你的 PreferenceFragment 类

    MyPreferenceFragment

    public class MyPreferenceFragment extends PreferenceFragment
    {
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.fragment_preference);
    }
    }


  • 然后是关联的xml资源

    fragment_preference.xml (in the folder res/xml of your project)

    <?xml version="1.0" encoding="utf-8"?>

    <PreferenceScreen
    xmlns:android="http://schemas.android.com/apk/res/android">

    <PreferenceCategory
    android:title="FOO">

    <CheckBoxPreference
    android:key="checkBoxPref"
    android:title="check it out"
    android:summary="click this little box"/>

    </PreferenceCategory>

    </PreferenceScreen>

    这就是 Fragment 的全部内容。部分。



2。偏好 Activity

  • 创建 PreferenceActivity 类

    MyPreferenceActivity

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

    @Override
    protected boolean isValidFragment(String fragmentName)
    {
    return MyPreferenceFragment.class.getName().equals(fragmentName);
    }
    }

    不要忘记覆盖isValidFragment(String fragmentName)方法,因为您将被您的应用程序打脸! ;) 更严重的是,我不知道你为什么需要这样做,但它是需要的。如果有人对此有解释,我很乐意阅读:)

    编辑:


    感谢 kirtan403,我现在知道为什么需要它:因为 (android framework fragment injection) 必须设置它。


    正如您在 onBuildHeaders(List<Header> target) 中看到的那样我们加载另一个包含首选项的 headers 的 xml 文件。简而言之,标题是首选项的左侧部分, fragment 是右侧部分(对于平板电脑)。对于手机,您将首先拥有标题,当您单击一个项目时,相应的 fragment 将放在标题列表的顶部。

    阅读这篇文章 (Multi-pane development in Android with Fragments - Tutorial),图片可以自己解释。


  • 然后是关联的xml资源

    headers_preference.xml (in the folder res/xml of your project)

    <?xml version="1.0" encoding="utf-8"?>

    <preference-headers
    xmlns:android="http://schemas.android.com/apk/res/android">

    <header
    android:fragment="your.package.MyPreferenceFragment"
    android:title="Goto: Preference fragment"
    android:summary="An example of some preferences." />

    </preference-headers>

    您可能已经在 header 部分注意到了:

    android:fragment="your.package.MyPreferenceFragment"

    这将充当您要显示的 fragment 的链接。在平板电脑上,它将加载到右侧部分,而在手机上,它将加载到当前 View 的顶部。



3。 Android list

现在您应该做的是将您的 Activity 添加到 AndroidManifest.xml文件。

application里面部分添加这些行:

<activity
android:name="your.package.MyPreferenceActivity"
android:label="Preferences">
</activity>

你可能会告诉我:

"Oh darling you forgot to put android:launchMode="singleTask" in your actvity"

但是不要放这个,因为你永远不会在手机上加载你的 fragment 。这个错误被一位伟人解决了!这是他博客的链接 (Android header preferences on small screen/phone)。



4。从菜单启动首选项

最后你需要添加显示这个偏好的能力!!为此,您需要做 3 件事:

  • 菜单

    menu.xml (in the folder res/menu of your project)

    <?xml version="1.0" encoding="utf-8"?>

    <menu
    xmlns:android="http://schemas.android.com/apk/res/android">

    <item
    android:id="@+id/preferences"
    android:title="Preferences" />

    </menu>


  • 在您的 Main Activity(不是 PreferenceActivity)中通过 onCreateOptionsMenu(Menu menu) 方法加载此菜单

    @Override
    public boolean onCreateOptionsMenu(Menu menu)
    {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.menu, menu);
    return true;
    }


  • 启动 MyPreferenceActivity单击该按钮时的 Activity 。

    为此,您需要覆盖 onOptionsItemSelected(MenuItem item) Main Activity 中的方法。

    @Override
    public boolean onOptionsItemSelected(MenuItem item)
    {
    switch(item.getItemId())
    {
    case R.id.preferences:
    {
    Intent intent = new Intent();
    intent.setClassName(this, "your.package.MyPreferenceActivity");
    startActivity(intent);
    return true;
    }
    }

    return super.onOptionsItemSelected(item);
    }



瞧,我的 friend !

我没有测试过这段代码。我拿了它并用我自己的代码修改了它,所以我可能没有很好地复制粘贴的东西。如果您遇到错误告诉我,我会尝试找出问题并解决此问题。

我希望这篇文章能帮助一些人:D

干杯!

关于android - 如何在 Android 上创建 Preference Activity 和 Preference Fragment?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23523806/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com