我正在做一个应用程序,它在ViewPager中显示数据库中的内容.我还有一个小部件,它不时拉出一个随机行并显示它.现在,当我点击它时,我将进入一个活动,其中显示相同的内容,现在我可以对其采取行动.
一切正常,但是当我有一个已经运行的活动,然后点击小部件时,它似乎创建了一个新实例,因为当我按下后退按钮时,我没有退出应用程序,而是被带到之前的实例或其他东西.
有没有办法启动一个活动的新实例,如果有一些以前的实例运行关闭它们,使用标志?
我玩了CLEAR_TOP和那些东西但老实说我不知道我在做什么.
谢谢!
//编辑
Intent.FLAG_ACTIVITY_CLEAR_TOP似乎没有做任何事情. Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP似乎将前一个放在顶部并忽略了新的一个或者什么.也许让我改一下,我从启动器图标开始活动,然后我按下主页按钮并单击小部件,它应该启动一个新实例,其中ViewPager.setCurrentItem设置正确的页面(与小部件相同).如果之前没有运行主要活动,一切都没问题,但如果它正在运行,请完成它.
MyWidgetProvider extends AppWidgetProvider @Override public void onUpdate(Context context,AppWidgetManager appWidgetManager,int[] appWidgetIds) { Log.d("MainActivity","MyWidgetProvider # onUpdate"); for (int i = 0; i < appWidgetIds.length; i++) { int appWidgetId = appWidgetIds[i]; Intent intent = new Intent(context,MainActivity.class); intent.putExtra("from_widget",true); //intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); PendingIntent pendingIntent = PendingIntent.getActivity(context,intent,PendingIntent.FLAG_UPDATE_CURRENT); RemoteViews views = new RemoteViews(context.getPackageName(),R.layout.widget_layout); views.setOnClickPendingIntent(R.id.widget_container,pendingIntent); appWidgetManager.updateAppWidget(appWidgetId,views); } }
解决方法
另一种替代方法是,如果活动已经位于堆栈顶部,则重用该活动的相同实例.在这种情况下,您需要设置Intent.FLAG_ACTIVITY_CLEAR_TOP和Intent.FLAG_ACTIVITY_SINGLE_TOP.如果这样做,Android将不会创建活动的另一个实例,但会调用您活动的onNewIntent()来传递新的Intent.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。