非弃用findPreference()方法? - Android电子(Non Depreca

2019-06-25 21:58发布

我想,当检测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>

快照:

点击关于(或Access标签分类)后Preference ,我想开一个intent某种(也可以是视频或其他任何...的名称误导)。

Answer 1:

是否有非弃用相同呢?

如果您正在使用PreferenceFragment在API级别11+的设备,你会叫findPreference()就可以了。 否则,调用findPreference()在你的PreferenceActivity ,因为你别无选择。

如果不是,我用它是什么呢?

它将工作。

片段如何能帮助我做我的工作在一个更好的办法?

API等级11+介绍PreferenceFragment作为构建的内容的另一种方式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>

(如见于JavaDoc中PreferenceActivity

这将创建偏好UI的条目,点击后会开始活动与指定的Intent



Answer 2:

如果您使用的片段,可以在首选项片段的基础上,使用的方法“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
         }
     });
  }
}


Answer 3:

也许文档的链接都不清楚。 但是,使用该功能是非常简单的。 例如,你可以使用它作为这样的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!



Answer 4:

2018 UPDATE今天, 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;
    }
}


文章来源: Non Deprecated findPreference() Method? - Android