こういう風に
- PreferenceFragmentCompatの設定項目をタップ
- 指定したURLを外部ブラウザで開く
みたいなやつを実現する方法のメモ。
方法は2つあるみたいです。
XMLで設定する方法
まずXMLで指定する方法。
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<PreferenceCategory app:title="テスト">
<Preference
android:key="google"
android:summary="タップするとGoogleが開きます。"
android:title="Googleを開く">
<intent
android:action="android.intent.action.VIEW"
android:data="http://www.google.com" />
</Preference>
<Preference
android:key="yahoo"
android:summary="タップするとYahooが開きます。"
android:title="Yahooを開く">
<intent
android:action="android.intent.action.VIEW"
android:data="http://www.yahoo.co.jp" />
</Preference>
</PreferenceCategory>
</PreferenceScreen>
8~10行、16~18行のようにintentを指定する。XMLで書くだけでいいので楽ちん。
ただ単に「タップしたらURLを開く」という単純なことをしたいだけの場合はこっちでいいかも。
コードから設定する方法
コードからも設定できる。
public class SettingsFragment extends PreferenceFragmentCompat {
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
setPreferencesFromResource(R.xml.root_preferences, rootKey);
//リスナーを設定
getPreferenceManager().findPreference("google").setOnPreferenceClickListener(listener);
getPreferenceManager().findPreference("yahoo").setOnPreferenceClickListener(listener);
}
//リスナー
Preference.OnPreferenceClickListener aboutapp=new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
String url;
switch (preference.getKey()){
case "google":
url = "https://www.google.co.jp/";
break;
case "yahoo":
url = "https://www.yahoo.co.jp";
break;
default:
url = "https://www.hoge.com";
}
Uri uri = Uri.parse(url);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
if (intent.resolveActivity(getActivity().getPackageManager()) != null) {
startActivity(intent);
}
return false;
}
};
}
findPreferenceしてPreferenceを取得。
そしてそれらに対してリスナーを設定する方法。
「こういう条件のときはこのURLを開くようにする」とか「設定によってタップ自体を無効にする」みたいなややこしいことをしたい場合はこっちの方法で。
コメント