Не устаревший метод 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)
устарел.
- Есть ли устаревший эквивалент?
- Если нет, что, если я его использую?
- Как
Fragments
помочь мне лучше выполнить мою задачу? Chek here: Настройки без устаревших методов.
Здесь вы можете проверить структуру макета 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
(также может быть видео или что-то еще... имена вводят в заблуждение).
Ответы
Ответ 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!