Открытие фрагмента с помощью быстрого ярлыка приложения - PullRequest
0 голосов
/ 09 июня 2018

Здравствуйте, я знаю, что это дублирующий вопрос, но я не смог найти решение из других тем.

Вот моя проблема, у меня есть приложение с нижней панелью навигации с пятьюфрагмент.Я хочу открыть этот фрагмент с помощью ярлыка приложения.

Вот то, что я создал,

shortcut.xml

<shortcuts xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android">
<shortcut
    android:shortcutId="first"
    android:enabled="true"
    android:icon="@drawable/shortcut_1"
    android:shortcutShortLabel="@string/shortcut_short_label_one"
    android:shortcutLongLabel="@string/shortcut_long_label_one"
    tools:targetApi="n_mr1">
    <intent
        android:action="com.xxxxxxx.xxxx.FIRST"
        android:targetPackage="com.xxxxxxx.xxxx.test"
        android:targetClass="com.xxxxxxx.xxxx.test.MainActivity" />
</shortcut>
<!-- Specify more shortcuts here. -->
<shortcut
    android:shortcutId="second"
    android:enabled="true"
    android:icon="@drawable/shortcut_2"
    android:shortcutShortLabel="@string/shortcut_short_label_two"
    android:shortcutLongLabel="@string/shortcut_long_label_two"
    tools:targetApi="n_mr1">
    <intent
        android:action="com.xxxxxxx.SECOND"
        android:targetPackage="com.xxxxxxx.xxxx.test"
        android:targetClass="com.xxxxxxx.xxxx.test.SecondFragment" />
</shortcut>
</shortcut> 

Вот onCreate () изMainActivity

private static final String Second = "com.xxxxxxx.xxxx.SECOND";

    //code vomited  

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        if (Second.equals(getIntent().getAction())){
            SecondFragment secondFragment = new SecondFragment();
            android.support.v4.app.FragmentTransaction fragmentTransactionTwo = getSupportFragmentManager().beginTransaction();
            fragmentTransactionTwo.replace(R.id.content_main, secondFragment, "Fragment two");
            fragmentTransactionTwo.commit();
        }

        BottomNavigationView navigation = findViewById(R.id.navigation);
        BottomNavigationViewHelper.disableShiftMode(navigation);     //disabling the shitty shifting mode
        navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);

        FirstFragment firstFragment = new FirstFragment();
        android.support.v4.app.FragmentTransaction fragmentTransactionOne = getSupportFragmentManager().beginTransaction();
        fragmentTransactionOne.replace(R.id.content_main, firstFragment, "Fragment one");
        fragmentTransactionOne.commit();
    }

Здесь первый актив запускается нормально, т.е. MainActivity().Но нажмите на второй ярлык, ничего не происходит.

Кто-нибудь объяснит мне, что я делаю не так?

1 Ответ

0 голосов
/ 10 июня 2018

Я вижу несколько вещей, которые выглядят не так:

В файле shortcut.xml:

Оба ярлыка должны быть нацелены на класс MainActivity, так какэто точка входа и ответственность за добавление фрагментов в пользовательский интерфейс.Таким образом, вам нужно изменить targetClass на втором ярлыке и вместо этого настроить таргетинг на «MainActivity».

В методе onCreate:

Когда действие соответствует второмуярлык, он устанавливает второй фрагмент на экране, но метод продолжается и устанавливает первый фрагмент поверх него.

Я думаю, это должен быть if-else:

if (Second.equals(getIntent().getAction())) {
    SecondFragment secondFragment = new SecondFragment();
    android.support.v4.app.FragmentTransaction fragmentTransactionTwo = getSupportFragmentManager().beginTransaction();
    fragmentTransactionTwo.replace(R.id.content_main, secondFragment, "fragment two");
    fragmentTransactionTwo.commit();
} else {
    FirstFragment firstFragment = new FirstFragment();
    android.support.v4.app.FragmentTransaction fragmentTransactionOne = getSupportFragmentManager().beginTransaction();
    fragmentTransactionOne.replace(R.id.content_main, firstFragment, "Fragment one");
    fragmentTransactionOne.commit();
}
...