非弃用的 findPreference() 方法? - 安卓

新手上路,请多包涵

我想检测 Preference 中包含的 ListView 被点击,以便我可以启动管理该选择的意图。

我会在我的布局 XML 文件中这样做:

 <Preference android:title="About" android:key="myKey"></Preference>

以下是我的 java 代码:

 Preference myPref = (Preference) findPreference("myKey");
myPref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
             public boolean onPreferenceClick(Preference preference) {
                 //open browser or intent here
             }
         });

但该方法 public Preference findPreference (CharSequence key) 已被弃用。

  1. 是否有未弃用的等效项?
  2. 如果没有,如果我仍然使用它怎么办?
  3. Fragments 如何帮助我更好地完成任务?在这里查看: 没有弃用方法的首选项

在这里您可以检查我的活动具有的 XML 布局结构,以及应用程序的快照:

XML:

 <?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >

    <Preference
        android:key="about"
        android:title="@string/titleAbout"
        android:summary="@string/summaryAbout"
    />

    <Preference
        android:key="labelTaxonomy"
        android:title="@string/titleLabelTaxonomy"
        android:summary="@string/summaryLabelTaxonomy"
    />

</PreferenceScreen>

快照:

快照

单击关于(或访问标签分类法) Preference ,我想打开一个 intent 某种(也可以是视频或其他任何东西……名称具有误导性)。

原文由 Matteo 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 787
2 个回答

是否有未弃用的等效项?

如果您在 API 级别 11+ 设备上使用 PreferenceFragment ,您将在其上调用 findPreference() 。否则,请在您的 findPreference() PreferenceActivity ,因为您别无选择。

如果没有,如果我仍然使用它怎么办?

它会起作用。

Fragments 如何帮助我更好地完成任务?

API 级别 11+ 引入了 PreferenceFragment 作为构建 a PreferenceActivity 内容的另一种方式。欢迎您使用它们,但如果您仍在支持旧设备,则不能对这些设备使用 PreferenceFragment

话虽如此:

我想检测 ListView 中包含的首选项何时被单击,以便我可以启动一个意图来管理该选择。

为此,您不需要 Java 代码。利用:

     <PreferenceScreen
            android:title="@string/title_intent_preference"
            android:summary="@string/summary_intent_preference">

        <intent android:action="android.intent.action.VIEW"
                android:data="http://www.android.com" />

    </PreferenceScreen>

(如 PreferenceActivity 的 JavaDocs 所示

这将在首选项 UI 中创建一个条目,单击该条目将启动具有指定 Intent 的活动。

原文由 CommonsWare 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果您使用片段,则可以在首选项片段的基础上使用方法“findPreference()”。

 public class CustomActivity extends PreferenceActivity {
  @Override
  public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_custom);

      CustomFragment customFragment = (CustomFragment) getFragmentManager().findFragmentById(R.id.custom_fragment);
      EditTextPreference textPreference = (EditTextPreference) customFragment.findPreference("preference_key");

      textPreference.setOnPreferenceClickListener(new OnPreferenceClickListener() {
         public boolean onPreferenceClick(Preference preference) {
             //open browser or intent here
         }
     });
  }
}

原文由 kaffee_kocher 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题