Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 多个小部件:在小部件单击时启动配置活动_Android - Fatal编程技术网

Android 多个小部件:在小部件单击时启动配置活动

Android 多个小部件:在小部件单击时启动配置活动,android,Android,以下场景: 我的主屏幕上有3个相同的小部件。如果单击其中一个,则启动小部件配置活动 这是通过以下代码实现的: Intent intent = new Intent(context, WidgetConfigurator.class); intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setData(

以下场景: 我的主屏幕上有3个相同的小部件。如果单击其中一个,则启动小部件配置活动

这是通过以下代码实现的:

Intent intent = new Intent(context, WidgetConfigurator.class);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); 
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));
PendingIntent pendIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
remoteView.setOnClickPendingIntent(R.id.widget_linearlayout, pendIntent);
启动正常,但有一个问题:
1.小部件A被单击,小部件A的配置活动被打开
2.用户点击“后退”键,配置活动消失
3.小部件B被单击,小部件B的配置活动被打开
4.用户点击“后退”键
=>现在显示小部件A的配置活动

我始终只希望显示“实际”配置活动(与单击的小部件相匹配)。对于Intent/PendingEvent,我必须使用哪些设置


thx如需任何帮助,请调用finish(),以确保当前活动已结束。android应用程序是类似于堆栈的构建,活动A启动,如果用户回击,该活动不会结束。它就位于新启动的活动B下。如果用户在活动B中回击,则将显示活动A。我从未尝试过这个方法,但是如果在onBackPressed方法中调用finish,则当前活动将关闭。要做到这一点,请在活动中覆盖onBackPressed。

经过多次尝试,我现在找到了适用于所有android版本的有效解决方案:

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));
PendingIntent pendIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
remoteView.setOnClickPendingIntent(R.id.widget_linearlayout, pendIntent);

当android重用意图时,更改挂起的意图代码以包含小部件id。我在这上面浪费了很多时间,因为点击时发送了错误的意图

PendingIntent pendIntent = PendingIntent.getActivity(context, WIDGETID, intent, PendingIntent.FLAG_UPDATE_CURRENT);