[Preference]項目をタップしたらURLを開く方法

こういう風に

  1. PreferenceFragmentCompatの設定項目をタップ
  2. 指定した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を開くようにする」とか「設定によってタップ自体を無効にする」みたいなややこしいことをしたい場合はこっちの方法で。

Android
スポンサーリンク
この記事を書いた人
penpen

1991生まれ。
2019年くらいからフロントエンドエンジニアを目指している元アフィリエイターです💩

penpenをフォローする
penpenをフォローする
penpenメモ

コメント

タイトルとURLをコピーしました