android-fragments 不建议使用的findPreference()方法?- Android

jslywgbw  于 2022-11-14  发布在  Android
关注(0)|答案(4)|浏览(214)

我希望检测包含在ListView中的Preference何时被单击,以便启动Intent来管理该选择。
我会在我的布局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.是否有未过时的对等用法?
1.如果没有,如果我仍然使用它会怎样?

  1. Fragments如何帮助我以更好的方式完成任务?请查看此处:Preferences without deprecated methods
    在这里,您可以查看我的Activity所拥有的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>

快照:

在单击About(或Access Label Taxonomy)Preference后,我想打开某种类型的intent(也可能是视频或其他任何内容...这些名称容易引起误解)。

velaa5lx

velaa5lx1#

是否有未过时的对等用法?
如果您在API Level 11+设备上使用PreferenceFragment,则应在该设备上调用findPreference()。否则,请在PreferenceActivity上调用findPreference(),因为您别无选择。
如果没有,如果我仍然使用它会怎样?
它会起作用的。
Fragments如何帮助我更好地完成任务?
API Level 11+引入了PreferenceFragment作为构造PreferenceActivity内容的另一种方法。欢迎您使用它们,但如果您仍支持较旧的设备,则不能将PreferenceFragment用于这些设备。
话虽这么说:
我希望检测ListView中包含的Preference何时被单击,以便启动Intent来管理该选择。
您不需要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>

(as见JavaDocs for PreferenceActivity
这将在首选项UI中创建一个条目,单击该条目将启动一个具有指定Intent的Activity。

xa9qqrwz

xa9qqrwz2#

如果你使用片段,你可以在一个preferences片段的基础上使用方法“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
         }
     });
  }
}
gudnpqoy

gudnpqoy3#

2018 UPDATE现在,必须在Preference片段中覆盖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;
    }
}
myss37ts

myss37ts4#

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

相关问题