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

Mat*_*teo 42 java android deprecated android-preferences android-fragments

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

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

<Preference android:title="About" android:key="myKey"></Preference>
Run Code Online (Sandbox Code Playgroud)

以下java代码在我的代码中:

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

但该方法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>
Run Code Online (Sandbox Code Playgroud)

快照:

snapshopt

点击关于(或访问标签分类)后Preference,我想打开intent某种类型(也可能是视频或其他任何东西......这些名称具有误导性).

Com*_*are 60

有没有被弃用的等价物吗?

如果您PreferenceFragment在API Level 11+设备上使用,则可以使用findPreference()它.否则,请打电话findPreference()给你PreferenceActivity,因为你别无选择.

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

它会工作.

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

引入API Level 11+ PreferenceFragment作为构建a的内容的另一种方式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>
Run Code Online (Sandbox Code Playgroud)

(如JavaDocs中所示PreferenceActivity)

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


kaf*_*her 5

如果使用片段,则可以根据首选项片段使用方法“ 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
         }
     });
  }
}
Run Code Online (Sandbox Code Playgroud)