Как сделать одну глубокую ссылку в пользовательском интерфейсе настроек - PullRequest
1 голос
/ 10 апреля 2019

У меня есть приложение для Android, в котором используется пользовательский интерфейс настроек.Я хочу иметь возможность глубокой ссылки на конкретный вариант предпочтения.Я не могу понять, как это сделать.

Я настроил предпочтения с помощью учебника следующим образом

  1. https://developer.android.com/guide/topics/ui/settings
  2. https://medium.com/@JakobUlbrich/building-a-settings-screen-for-android-part-1-5959aa49337c (часть 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

Я настроил глубокое связывание с помощью этого урока

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

Я хочу иметь возможность глубокой связи непосредственно с одним из предпочтений.

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());
}
}

Я не знаю, каквызвать глубокую ссылку в определенную ссылку.Есть только одно действие, но есть три предпочтения.

...