java - 通过快捷应用快捷方式打开 fragment

标签 java android xml android-appshortcut

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

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

这是我创建的,

快捷方式.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();
    }

这里第一个 Activity 正常启动,即MainActivity()。但是单击第二个快捷方式没有任何反应。

谁能解释一下我做错了什么吗?

最佳答案

我发现一些看起来不太正确的事情:

在快捷方式.xml 上:

两个快捷方式都应以“MainActivity”类为目标,因为这是入口点并负责将 fragment 添加到用户界面。因此,您需要更改第二个快捷方式上的 targetClass 并以“MainActivity”为目标。

在 onCreate 方法上:

当该操作对应于第二个快捷方式时,它会在屏幕上设置第二个 fragment ,但该方法继续并在其上设置第一个 fragment 。

我想它应该是一个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();
}

关于java - 通过快捷应用快捷方式打开 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50778003/

相关文章:

java - 将 Java applet 转换为 Jar 时出现问题。可能图片加载问题

java - 在spring mvc中使用http请求参数

android - OpenSSL 库中的链接错误

xml - 使用 xslt 样式表将 xml 文档转换为逗号分隔 (CSV) 文件

xml - 用于跨多个子节点检查属性值的 XPath 表达式

java.io.IOException : Invalid Http response 异常

java - 打印 JscrollPane 对象

android - 如何在 android 中将图像转换为 pdf?

Android Studio 警告新版本库可用,但不存在

javascript - 正则表达式将 XML 转换为 JSON