49

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>

スナップショット:

スナップショップ

About(またはAccess Label Taxonomy)をクリックした後、ある種のものPreferenceを開きたいと思います(ビデオまたは他のものである可能性もあります...名前は誤解を招く可能性があります)。intent

4

4 に答える 4

63

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

PreferenceFragmentAPIレベル11以降のデバイスで使用している場合は、それを呼び出しfindPreference()ます。それ以外の場合は、選択の余地がないため、を呼び出しfindPreference()ます。PreferenceActivity

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

それが動作します。

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

PreferenceFragmentのコンテンツを構築する別の方法として導入されたAPIレベル11+ 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 forPreferenceActivityで見られるように)

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

于 2012-06-30T11:46:58.627 に答える
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
         }
     });
  }
}
于 2015-04-11T13:14:55.003 に答える
2

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;
    }
}
于 2018-10-22T16:47:14.007 に答える
1

おそらくドキュメントのリンクが明確ではありません。しかし、その機能の使用は非常に簡単です。たとえば、このような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に感謝します!

于 2014-04-15T10:48:03.690 に答える