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)
は非推奨です。
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:
[About](またはAccess Label Taxonomy)Preference
をクリックした後、何らかの種類のintent
を開きたい(ビデオなどでもかまいません...名前は誤解を招く可能性があります) )。
非推奨ではない同等のものはありますか?
APIレベル11以降のデバイスでPreferenceFragment
を使用している場合は、findPreference()
を呼び出します。それ以外の場合、選択肢がないので、PreferenceActivity
でfindPreference()
を呼び出します。
そうでない場合、とにかくそれを使用するとどうなりますか?
それが動作します。
フラグメントは、タスクをより良い方法で行うのにどのように役立ちますか?
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
でアクティビティが開始されます。
フラグメントを使用する場合、設定フラグメントに基づいてメソッド「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
}
});
}
}
多分 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に感謝します!
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;
}
}