以新意图启动MainActivity会破坏启动新意图android的onClicks视图

时间:2018-10-09 18:05:50

标签: java android android-intent android-memory

我想知道为什么Android无法加载我的活动。

我在MainActivity内的RecyclerView中设置了启动另一个活动(Activity2)的意图。目前,在打开应用程序并单击这些项目时,这没有问题。

我有一个小部件,它也已设置为打开Activity2。这样做正确无误,对后向导航没有任何问题,除非关闭了应用程序。在这种情况下,小部件只是关闭了应用程序,而不是从Activity2MainActivity的返回按钮。

清单将两个活动都声明为“ SingleTop”。

为了解决此问题,我将代码添加到onBackPressed()方法中,并捆绑了其他代码,以了解窗口小部件或主体是否已启动Activity2。现在,如果小部件从空/已关闭的应用启动了MainActivity,则代码将开始Activity2的意图,但是在这种情况下,项目的onClicks不再能够启动Activity2

TLDR:始于MainActivity的意图将意图启动中断回到始于MainActivity的活动。

这是我的代码,如果小部件从无效活动开始,该代码将结束第二个活动。

        if(mDidWidgetStart && isTaskRoot()) {
        Log.d(TAG, "isTaskRoot and widget started");
            Intent mainActIntent = new Intent(MediaPlayerActivity.this, MainMediaActivity.class);
            startActivity(mainActIntent);
            finish();
}

在我的清单中,两个活动都用android:launchMode:"singleTop"声明。

在RV项目中调用我的onclick,如下所示:

    if(...) {

ActivityOptionsCompat options = ActivityOptionsCompat.
            makeSceneTransitionAnimation((Activity) v.getContext(),
                    holder.thumbnailView,
                    holder.thumbnailView.getTransitionName());

            VideoParcelable ytVideo = (VideoParcelable) 

            Toast.makeText(mContext, "Intent launched", 
            Toast.LENGTH_SHORT).show();
            Intent myIntent= new Intent(mContext, 
            MediaPlayerActivity.class);
            myIntent.putExtra("video_object", video);

            MyIntent.putExtras(options.toBundle());
            mContext.startActivity(MyIntent);
            //logging to determine values are present
            Log.v(TAG, "mContext = " + mContext);
            Log.v(TAG, "v.getContext() = " + v.getContext());
            Log.v(TAG, "myIntent: " + myIntent);
}

我知道上面的代码的if语句和mContext是正确的,因为单击该项目时会出现Toast消息,但是该意图从未开始。单击失败的日志返回非空值。

评论中要求的添加的小部件更新代码

private static RemoteViews getDefaultWidgetViews(Context context) {
    RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.video_widget);
    Intent launchMainActivityIntent = new Intent(context, MainMediaActivity.class);
    //set pending intent
    PendingIntent appPendingIntent = PendingIntent.getActivity(context, 0, launchMainActivityIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    //sets actual click action on the widget layout view
    remoteViews.setOnClickPendingIntent(R.id.video_widget_layout, appPendingIntent);
    //return created remote views
    return remoteViews;
}

更新:在稍后放弃并重新启动项目后,此错误不再显示。我没有更改任何代码...这可能是由某种Gradle同步问题引起的吗?不可能是模拟器,因为在我的手机上也发生了同样的结果。

*请注意自我,屏幕快照并捕获诸如此类的未来怪异的每个细节。有人知道AS是否/在哪里保留以前会话的旧Logcat输出吗?还是总是清除它?

0 个答案:

没有答案
相关问题