Подтвердить что ты не робот

Не устаревший метод findPreference()? - Android

Я хочу обнаружить, когда нажата кнопка Preference, содержащаяся в ListView, так что я могу запустить намерение управлять этим выбором.

Я бы сделал это в файле layout 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) устарел.


Здесь вы можете проверить структуру макета 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>

ПАНОРАМА:

snapshopt

После нажатия кнопки "Оповещать" (или "Точность тактики доступа" ) Preference, я хотел бы открыть какой-либо intent (также может быть видео или что-то еще... имена вводят в заблуждение).

4b9b3361

Ответ 1

Есть ли не устаревший эквивалент?

Если вы используете PreferenceFragment на устройствах уровня API 11+, вы должны называть findPreference() на нем. В противном случае вызовите findPreference() на PreferenceActivity, поскольку у вас нет выбора.

Если нет, что, если я его использую?

Он будет работать.

Как Фрагменты помогут мне лучше выполнить мою задачу?

Уровень API 11+ представил PreferenceFragment как еще один способ построения содержимого a 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 для PreferenceActivity)

Это создаст запись в пользовательском интерфейсе предпочтений, который при щелчке начнет действие с указанным Intent.

Ответ 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
         }
     });
  }
}

Ответ 3

возможно 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!