【问题标题】:How to open a specific Fragment when clicking on a home screen widget单击主屏幕小部件时如何打开特定片段
【发布时间】:2017-02-21 11:11:05
【问题描述】:

单击主屏幕小部件时如何打开特定片段,我已经可以打开一个 Activity 但我不知道如何从小部件打开片段这是我的小部件类

public class MyWidget extends AppWidgetProvider {
ComponentName watchWidget;
RemoteViews remoteViews;
private static final String SYNC_CLICKED = "automaticWidgetSyncButtonClick";

void updateAppWidget(Context context, AppWidgetManager appWidgetManager,
                     int appWidgetId) {



    remoteViews = new RemoteViews(context.getPackageName(), R.layout.My_widgets);
    watchWidget = new ComponentName(context, MyWidget.class);
    remoteViews.setTextViewText(R.id.appwidget_text,"Widget Example");
    // start Activity from the widget

    Intent configIntent = new Intent(context, MainActivity.class);
    PendingIntent configPendingIntent = PendingIntent.getActivity(context, 0, configIntent, 0);
    remoteViews.setOnClickPendingIntent(R.id.widget_container, configPendingIntent);
    appWidgetManager.updateAppWidget(watchWidget, remoteViews);
}

有什么想法吗?

【问题讨论】:

    标签: android android-studio android-widget


    【解决方案1】:

    为什么不将一些标志(Bundle)传递给 Intent 并在 Activity onCreate 或 onNewIntent 中检查它,如果设置为 true(或任何值)打开 Fragment?

    小部件:

    Intent configIntent = new Intent(context, MainActivity.class);
    configIntent.putExtra("key", value);
    configIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
    PendingIntent configPendingIntent = PendingIntent.getActivity(context, 0, configIntent, 0);
    

    活动:

    Bundle extras = getIntent().getExtras();
    if (extras != null) {
        value_type value = extras.get("key");        
    }
    

    请记住,您必须在 onCreate 和 onNewIntent 中都检查它。

    【讨论】:

    • 谢谢,这真的很有帮助。
    【解决方案2】:

    对于导航组件,请使用深层链接

    清单:将此行添加到 android 清单中的活动部分

    <activity>
        <nav-graph android:value="@navigation/main_nav_graph" />
    </activity>
    

    导航图:

    <fragment
    ...>
     <deepLink
                android:id="@+id/deepLink"
                app:uri="myapp://example.com/text" />
    </fragment>
    

    ExWidget.kt:在小部件文件中声明待处理的意图。

    val pendingIntent = NavDeepLinkBuilder(context)
                    .setGraph(R.navigation.main_nav_graph)
                    .setDestination(R.id.your_fragment)
                    .setArguments(
                        YourFragmentArgs.Builder(arguments
                        ).build().toBundle())
                    .createPendingIntent()
    

    并在 setOnClickPendingIntent 方法中分配这个 pendingIntent,

    val views = RemoteViews(context.packageName, R.layout.example_widget)   
    views.setOnClickPendingIntent(R.id.example_widget_button, pendingIntent)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-22
      相关资源
      最近更新 更多