3

I have an Android app that has used Preferences UI. I want to be able to deep link into the specific preference option. I can't figure out how to do that.

I have set up the preferences using the tutorial as follows

  1. https://developer.android.com/guide/topics/ui/settings
  2. https://medium.com/@JakobUlbrich/building-a-settings-screen-for-android-part-1-5959aa49337c (Part 1)
  3. https://medium.com/@JakobUlbrich/building-a-settings-screen-for-android-part-2-2ba63e2d7d1d
  4. https://medium.com/@JakobUlbrich/building-a-settings-screen-for-android-part-3-ae9793fd31ec

I have set up deep linking activity using this tutorial

https://developer.android.com/training/app-links/deep-linking

I want to be able to deep link directly into the one of the preferences.

public class SettingsActivity extends AppCompatActivity
    implements PreferenceFragmentCompat.OnPreferenceStartFragmentCallback
{
        @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_settings);
                FragmentFactory fragmentFactory = new AppFragmentFactory();

        final FragmentManager fragmentManager = getSupportFragmentManager();
        if (fragmentManager != null)
        {
            if (fragmentManager.findFragmentByTag(ROOT_FRAGMENT_TAG) == null)
            {
                final int containerId = R.id.detail_container;
                final Fragment fragment = fragmentFactory.create(RootPreferencesFragment.class);
                fragment.setArguments(savedInstanceState);
                fragmentManager.beginTransaction()
                    .add(containerId, fragment, ROOT_FRAGMENT_TAG)
                    .commit();
            }
        }
    }
}


    @Override
    public boolean onPreferenceStartFragment(PreferenceFragmentCompat callingFragment, Preference preference)
    {
        final Bundle arguments = preference.getExtras();
        final Fragment fragment = fragmentFactory.create(getClassLoader(), preference.getFragment());
        fragment.setArguments(arguments);
        fragment.setTargetFragment(callingFragment, 0);

        getSupportFragmentManager().beginTransaction()
            .replace(R.id.detail_container, fragment)
            .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
            .setBreadCrumbTitle(preference.getTitle())
            .addToBackStack(preference.getKey())
            .commit();
        return true;
    }

RootPreferencesFragment

public class RootPreferencesFragment extends PreferenceFragmentCompat implements DialogFragmentCallback
{
    @Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey)
{
    final FragmentActivity activity = Objects.requireNonNull(getActivity());

        // Notifications
    final Preference notificationsPreference = preferencesFactory.create(
        accountCategory,
        Preference.class,
        RootViewModel.ACCOUNT_NOTIFICATIONS_PREFERENCE_KEY,
        R.string.PushNotifications,
        RootViewModel.ACCOUNT_CATEGORY_KEY);
    notificationsPreference.setFragment(NotificationPreferencesFragment.class.getName());


    // General Category
    final PreferenceCategory generalCategory = preferencesFactory.create(
        preferenceScreen,
        PreferenceCategory.class,
        RootViewModel.GENERAL_CATEGORY_KEY,
        R.string.preferences_general_group);


    // About category
    final PreferenceCategory aboutCategory = preferencesFactory.create(
        preferenceScreen,
        PreferenceCategory.class,
        RootViewModel.ABOUT_CATEGORY_KEY,
        R.string.preferences_about_group);

    // About
    final Preference aboutPreference = preferencesFactory.create(
        aboutCategory,
        Preference.class,
        RootViewModel.ABOUT_PREFERENCE_KEY,
        R.string.preferences_about);
    aboutPreference.setSummary(aboutViewModel.getAppVersion());
    aboutPreference.setFragment(AboutPreferencesFragment.class.getName());
}
}

I don't know how to trigger deep link into a specific NotificationsPreference. There is only one activity, but there are three preferences.

Krish
  • 63
  • 6

0 Answers0