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

时间:2012-06-30 08:54:49

标签: java android android-fragments deprecated android-preferences

我想检测点击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如何帮助我更好地完成任务?请在这里查看:Preferences without deprecated methods

  4. 在这里,您可以查看我的活动所具有的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(也可能是视频或其他任何内容......名称是误导)。

4 个答案:

答案 0 :(得分:60)

  

是否有未弃用的等价物?

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

  

如果没有,如果我还是使用它会怎么样?

它会起作用。

  

片段如何帮助我以更好的方式完成任务?

API Level 11+引入PreferenceFragment作为构建PreferenceActivity内容的另一种方式。我们欢迎您使用它们,但如果您仍在使用旧设备,则无法将PreferenceFragment用于这些设备。

话虽如此:

  

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

您不需要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>

(见JavaDocs for PreferenceActivity

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

答案 1 :(得分:4)

如果你使用片段,你可以使用方法&#34; findPreference()&#34;在偏好片段的基础上。

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
         }
     });
  }
}

答案 2 :(得分:1)

可能docs链接不清楚。但使用该功能非常简单。例如,你可以将它用作这样的推特页面

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

答案 3 :(得分:0)

2018更新 今天,onPreferenceTreeClick方法为此目的必须在“首选项”片段中被覆盖。例如:

public class MySettingsFragment extends PreferenceFragment {

    @Override
    public boolean onPreferenceTreeClick (PreferenceScreen preferenceScreen,
                                          Preference preference)
    {
        String key = preference.getKey();
        if(key.equals("someKey")){
            // do your work
            return true;
        }
        return false;
    }
}