こういう風に
- 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を開くようにする」とか「設定によってタップ自体を無効にする」みたいなややこしいことをしたい場合はこっちの方法で。
コメント