Launch Fragment (instead of Activity) from Android 7.1 App Shortcut

痞子三分冷 提交于 2019-12-22 04:13:08

问题


I have decided to look at adding static shortcuts into an application, using this page as reference:

https://developer.android.com/preview/shortcuts.html

The XML for my shortcuts currently looks like so:

<?xml version="1.0" encoding="utf-8"?>
<shortcuts xmlns:tools="http://schemas.android.com/tools"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <shortcut
        android:shortcutId="id"
        android:enabled="true"
        android:icon="@drawable/icon"
        android:shortcutShortLabel="@string/short_label"
        android:shortcutLongLabel="@string/long_label"
        android:shortcutDisabledMessage="@string/disabled_message">
        <intent
            android:action="android.intent.action.VIEW"
            android:targetPackage="com.example"
            android:targetClass="com.example.Activity" />
        <categories android:name="android.shortcut.category" />
    </shortcut>
</shortcuts>

The issue comes from the targetClass variable as I cannot find a way to launch a Fragment rather than an Activity. Most of the main pages I would want to launch from the shortcuts are Fragments displayed within an Activity. How can I get the intent to launch straight to a Fragment instead?


回答1:


You can do the following:

1) In the intent specified in shortcuts.xml, set a custom intent action string:

 <intent
        android:action="com.your.packagename.custom.name"
        android:targetPackage="com.example"
        android:targetClass="com.example.Activity" />

2) Check for the getIntent().getAction() for intent action in the Activity specified in android:targetClass:

public void onCreate(Bundle savedInstanceState){
    if (CUSTOM_NAME.equals(getIntent().getAction())) {
        // do Fragment transactions here 
    }
}



回答2:


You can easily achieve this with the Shortbread library.

public class MainActivity extends Activity {

    @Shortcut(id = "movies", shortLabel = "Movies", icon = R.drawable.ic_shortcut_movies)
    public void showMovies() {
        getFragmentManager().beginTransaction()
                .replace(R.id.fragment_container, new MoviesFragment())
                .commit();
    }
}

Add Shortbread.create(this) in the onCreate() method of your Application or MainActivity and you're done.



来源:https://stackoverflow.com/questions/40266221/launch-fragment-instead-of-activity-from-android-7-1-app-shortcut

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!