gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 10:23:52 26 4
gpt4 key购买 nike

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

这是我的问题,我有一个带有底部导航栏的应用程序,其中有五个 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com