非弃用的findPreference()方法? – Android

我想检测一个ListView包含的Preference何时被点击,以便我可以启动一个意图来pipe理这个select。

我会在我的布局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如何帮助我以更好的方式完成我的任务?Chek here: 没有弃用方法的首选项 。

在这里,您可以检查我的活动所具有的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> 

快照:

snapshopt

点击关于(或访问标签分类) Preference ,我想打开某种intent (也可以是video或其他任何…名称是误导性的)。

是否有一个不赞成的等价物?

如果您在API Level 11+设备上使用PreferenceFragment ,则可以在其上调用findPreference() 。 否则,请在您的PreferenceActivity上调用findPreference() ,因为您别无select。

如果不是的话,如果我用它呢?

它会工作。

碎片如何帮助我更好地完成我的任务?

API Level 11+引入了PreferenceFragment作为构造PreferenceActivity内容的另一种方式。 欢迎您使用它们,但是如果您仍然支持较旧的设备,则不能为这些设备使用PreferenceFragment

话虽如此:

我想检测一个ListView中包含的偏好何时被点击,以便我可以启动一个意图来pipe理这个select。

你不需要这个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中创build一个条目,单击该条目时,将使用指定的Intent启动一个活动。

如果使用片段,则可以根据首选项片段使用“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 } }); } } 

也许文档链接不清楚。 但使用该function非常简单。 例如,你可以使用它作为这样的twitter页面

 <PreferenceCategory android:title="Share" > <PreferenceScreen android:title="Twitter" android:summary="Follow me at Twitter"> <intent android:action="android.intent.action.VIEW" android:data="https://twitter.com/" /> </PreferenceScreen> </PreferenceCategory> 

它不需要任何Java代码。 感谢CommonsWare!