web-dev-qa-db-ja.com

非推奨のfindPreference()メソッド? -Android

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

SNAPSHOT:

snapshopt

[About](またはAccess Label Taxonomy)Preferenceをクリックした後、何らかの種類のintentを開きたい(ビデオなどでもかまいません...名前は誤解を招く可能性があります) )。

41
Matteo

非推奨ではない同等のものはありますか?

APIレベル11以降のデバイスでPreferenceFragmentを使用している場合は、findPreference()を呼び出します。それ以外の場合、選択肢がないので、PreferenceActivityfindPreference()を呼び出します。

そうでない場合、とにかくそれを使用するとどうなりますか?

それが動作します。

フラグメントは、タスクをより良い方法で行うのにどのように役立ちますか?

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>

JavaDocs for PreferenceActivity で見られるように)

これにより、設定UIにエントリが作成され、クリックすると、指定されたIntentでアクティビティが開始されます。

60
CommonsWare

フラグメントを使用する場合、設定フラグメントに基づいてメソッド「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
         }
     });
  }
}
4
kaffee_kocher

多分 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に感謝します!

1
mehmet

2018 UPDATE今日、この目的のためにonPreferenceTreeClickメソッドをPreferenceフラグメントでオーバーライドする必要があります。例えば:

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;
    }
}
0
akelec