3

您好,我知道这是一个重复的问题,但我无法从其他线程中找到解决方案。

这是我的问题,我有一个带有五个片段的底部导航栏的应用程序。我想通过应用程序快捷方式打开这些片段。

这是我创造的,

快捷方式.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> 

这是 MainActivity 中的 onCreate()

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()。但是单击第二个快捷方式没有任何反应。

任何人解释我做错了什么?

4

2 回答 2

1

我看到一些看起来不正确的事情:

在快捷方式.xml 上:

两个快捷方式都应该针对“MainActivity”类,因为这是入口点,负责将片段添加到 ui。因此,您需要更改第二个快捷方式上的 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();
}
于 2018-06-09T21:11:53.083 回答
1

我有和你一样的问题,我找到了如何移动到片段。你应该采取行动。把它放在onCreate中,也许这会对你有所帮助

if ("com.xxxxxxx.YourShortcutAction".equals(getIntent().getAction())) {
        val fragment = YourFragment()
        addFragment(fragment)
    }

我使用 kotlin for android

于 2020-07-02T06:52:46.223 回答