简体   繁体   English

Xamarin.Forms.Android:java.lang.IllegalStateException:片段没有视图

[英]Xamarin.Forms.Android: java.lang.IllegalStateException: Fragment does not have a view

I'm developing a Xamarin.Forms app.我正在开发一个 Xamarin.Forms 应用程序。 It works well, but keeps on crashing when the user brings it back from background after opening a few other apps.它运行良好,但当用户在打开其他几个应用程序后将其从后台恢复时,它会继续崩溃。 I'm new to Xamarin and I'm not sure how to debug this issue.我是 Xamarin 的新手,我不确定如何调试此问题。 This issue is not happening on iOS so far.到目前为止,此问题未在 iOS 上发生。

SplashActivity.cs:飞溅活动.cs:

using System.Threading.Tasks;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Support.V7.App;
using Android.Util;

namespace MyApp.Droid
{
    [Activity(Theme = "@style/MyTheme.Splash", MainLauncher = true, NoHistory = true)]
    public class SplashActivity : AppCompatActivity
    {
        static readonly string TAG = "X:" + typeof(SplashActivity).Name;

        protected override void OnCreate(Bundle savedInstanceState) //  PersistableBundle persistentState
        {
            base.OnCreate(savedInstanceState); // persistentState
            Log.Debug(TAG, "SplashActivity.OnCreate");
        }

        protected override void OnResume()
        {
            base.OnResume();

            Task startupWork = new Task(() =>
                                        {
                                            Log.Debug(TAG, "Performing some startup work that takes a bit of time.");
                                            Task.Delay(5000); // Simulate a bit of startup work.
                                            Log.Debug(TAG, "Working in the background - important stuff.");
                                        });

            startupWork.ContinueWith(t =>
                                     {
                                         Log.Debug(TAG, "Work is finished - start Activity1.");
                                         StartActivity(new Intent(Application.Context, typeof(MainActivity)));
                                     }, TaskScheduler.FromCurrentSynchronizationContext());

            startupWork.Start();
        }
    }
}

MainActivity.cs:主要活动.cs:

using System;

using Android.App;
using Android.Content;
using Android.Content.PM;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;

using HockeyApp.Android;
using HockeyApp.Android.Metrics;

using Xamarin.Android.Net; // Keep to make TLS 1.2 work

namespace MyApp.Droid
{
    [Activity(Label = "EventingVolunteers.Droid", Icon = "@drawable/icon", Theme = "@style/MyTheme", ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
    public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
    {
        protected override void OnCreate(Bundle savedInstanceState)
        {
            TabLayoutResource = Resource.Layout.Tabbar;
            ToolbarResource = Resource.Layout.Toolbar;

            base.OnCreate(savedInstanceState);

            global::Xamarin.Forms.Forms.Init(this, savedInstanceState);

            LoadApplication(new App());

            // HockeyApp
            CrashManager.Register(this, Constants.HockeyAppID_Android);
            MetricsManager.Register(this, Application, Constants.HockeyAppID_Android);

            // Push Notifications
            RegisterForGCM();
        }

        private void RegisterForGCM()
        {
            string senders = Constants.GoogleConsoleProjectId;
            Intent intent = new Intent("com.google.android.c2dm.intent.REGISTER");
            intent.SetPackage("com.google.android.gsf");
            intent.PutExtra("app", PendingIntent.GetBroadcast(this, 0, new Intent(), 0));
            intent.PutExtra("sender", senders);
            StartService(intent);
        }

        protected override void OnPause()
        {
            base.OnPause();
        }

        protected override void OnResume()
        {
            base.OnResume();
        }

        protected override void OnDestroy()
        {
            base.OnDestroy();
        }
    }
}

Error message:错误信息:

java.lang.IllegalStateException: Fragment does not have a view
android.support.v4.app.Fragment$1.onFindViewById()Fragment.java:1933
android.support.v4.app.FragmentManagerImpl.moveToState()FragmentManager.java:1057
android.support.v4.app.FragmentManagerImpl.moveToState()FragmentManager.java:1252
android.support.v4.app.FragmentManagerImpl.moveToState()FragmentManager.java:1234
android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated()FragmentManager.java:2046
android.support.v4.app.Fragment.performActivityCreated()Fragment.java:1989
android.support.v4.app.FragmentManagerImpl.moveToState()FragmentManager.java:1092
android.support.v4.app.FragmentManagerImpl.moveToState()FragmentManager.java:1252
android.support.v4.app.FragmentManagerImpl.moveToState()FragmentManager.java:1234
android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated()FragmentManager.java:2046
android.support.v4.app.FragmentController.dispatchActivityCreated()FragmentController.java:174
android.support.v4.app.FragmentActivity.onStart()FragmentActivity.java:598
md5b60ffeb829f638581ab2bb9b1a7f4f3f.FormsAppCompatActivity.n_onStart(Native Method)
md5b60ffeb829f638581ab2bb9b1a7f4f3f.FormsAppCompatActivity.onStart()FormsAppCompatActivity.java:120
android.app.Instrumentation.callActivityOnStart()Instrumentation.java:1260
android.app.Activity.performStart()Activity.java:6261
android.app.ActivityThread.performLaunchActivity()ActivityThread.java:2389
android.app.ActivityThread.handleLaunchActivity()ActivityThread.java:2490
at android.app.ActivityThread.-wrap11(ActivityThread.java)
android.app.ActivityThread$H.handleMessage()ActivityThread.java:1354
android.os.Handler.dispatchMessage()Handler.java:102
android.os.Looper.loop()Looper.java:148
android.app.ActivityThread.main()ActivityThread.java:5456
java.lang.reflect.Method.invoke(Native Method)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run()ZygoteInit.java:728
com.android.internal.os.ZygoteInit.main()ZygoteInit.java:618
Xamarin caused by: Java.Lang.IllegalStateException: Fragment does not have a view
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
Java.Interop.JniEnvironment.InstanceMethods.CallNonvirtualVoidMethod(JniObjectReference instance, JniObjectReference type, JniMethodInfo method, JniArgumentValue* args)
Java.Interop.JniPeerMembers.JniInstanceMethods.InvokeVirtualVoidMethod(string encodedMember, IJavaPeerable self, JniArgumentValue* parameters)
Android.App.Activity.OnStart()
Xamarin.Forms.Platform.Android.FormsAppCompatActivity.OnStart()
Android.App.Activity.n_OnStart(IntPtr jnienv, IntPtr native__this)
at (wrapper dynamic-method) System.Object:23d8bc20-60cf-4cac-a339-6cc6722e8667 (intptr,intptr)
--- End of managed Java.Lang.IllegalStateException stack trace ---
java.lang.IllegalStateException: Fragment does not have a view
android.support.v4.app.Fragment$1.onFindViewById()Fragment.java:1933
android.support.v4.app.FragmentManagerImpl.moveToState()FragmentManager.java:1057
android.support.v4.app.FragmentManagerImpl.moveToState()FragmentManager.java:1252
android.support.v4.app.FragmentManagerImpl.moveToState()FragmentManager.java:1234
android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated()FragmentManager.java:2046
android.support.v4.app.Fragment.performActivityCreated()Fragment.java:1989
android.support.v4.app.FragmentManagerImpl.moveToState()FragmentManager.java:1092
android.support.v4.app.FragmentManagerImpl.moveToState()FragmentManager.java:1252
android.support.v4.app.FragmentManagerImpl.moveToState()FragmentManager.java:1234
android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated()FragmentManager.java:2046
android.support.v4.app.FragmentController.dispatchActivityCreated()FragmentController.java:174
android.support.v4.app.FragmentActivity.onStart()FragmentActivity.java:598
md5b60ffeb829f638581ab2bb9b1a7f4f3f.FormsAppCompatActivity.n_onStart(Native Method)
md5b60ffeb829f638581ab2bb9b1a7f4f3f.FormsAppCompatActivity.onStart()FormsAppCompatActivity.java:120
android.app.Instrumentation.callActivityOnStart()Instrumentation.java:1260
android.app.Activity.performStart()Activity.java:6261
android.app.ActivityThread.performLaunchActivity()ActivityThread.java:2389
android.app.ActivityThread.handleLaunchActivity()ActivityThread.java:2490
at android.app.ActivityThread.-wrap11(ActivityThread.java)
android.app.ActivityThread$H.handleMessage()ActivityThread.java:1354
android.os.Handler.dispatchMessage()Handler.java:102
android.os.Looper.loop()Looper.java:148
android.app.ActivityThread.main()ActivityThread.java:5456
java.lang.reflect.Method.invoke(Native Method)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run()ZygoteInit.java:728
com.android.internal.os.ZygoteInit.main()ZygoteInit.java:618
--- End of managed Java.Lang.IllegalStateException stack trace ---
java.lang.IllegalStateException: Fragment does not have a view
android.support.v4.app.Fragment$1.onFindViewById()Fragment.java:1933
android.support.v4.app.FragmentManagerImpl.moveToState()FragmentManager.java:1057
android.support.v4.app.FragmentManagerImpl.moveToState()FragmentManager.java:1252
android.support.v4.app.FragmentManagerImpl.moveToState()FragmentManager.java:1234
android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated()FragmentManager.java:2046
android.support.v4.app.Fragment.performActivityCreated()Fragment.java:1989
android.support.v4.app.FragmentManagerImpl.moveToState()FragmentManager.java:1092
android.support.v4.app.FragmentManagerImpl.moveToState()FragmentManager.java:1252
android.support.v4.app.FragmentManagerImpl.moveToState()FragmentManager.java:1234
android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated()FragmentManager.java:2046
android.support.v4.app.FragmentController.dispatchActivityCreated()FragmentController.java:174
android.support.v4.app.FragmentActivity.onStart()FragmentActivity.java:598
md5b60ffeb829f638581ab2bb9b1a7f4f3f.FormsAppCompatActivity.n_onStart(Native Method)
md5b60ffeb829f638581ab2bb9b1a7f4f3f.FormsAppCompatActivity.onStart()FormsAppCompatActivity.java:120
android.app.Instrumentation.callActivityOnStart()Instrumentation.java:1260
android.app.Activity.performStart()Activity.java:6261
android.app.ActivityThread.performLaunchActivity()ActivityThread.java:2389
android.app.ActivityThread.handleLaunchActivity()ActivityThread.java:2490
at android.app.ActivityThread.-wrap11(ActivityThread.java)
android.app.ActivityThread$H.handleMessage()ActivityThread.java:1354
android.os.Handler.dispatchMessage()Handler.java:102
android.os.Looper.loop()Looper.java:148
android.app.ActivityThread.main()ActivityThread.java:5456
java.lang.reflect.Method.invoke(Native Method)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run()ZygoteInit.java:728
com.android.internal.os.ZygoteInit.main()ZygoteInit.java:618

App.xaml.cs:应用程序.xaml.cs:

using System;
using System.Linq;
using Amazon;
using Xamarin.Forms;

namespace MyApp
{
    public partial class App : Application
    {
        public static string AppName { get { return "MyApp"; } }

        public static User User { get; set; }

        public static UserManager UserManager { get; private set; }

        public static VolunteerManager VolunteerManager { get; private set; }

        public static SignupManager SignupManager { get; private set; }

        static NavigationPage NavPage;

        public static bool IsLoggedIn
        {
            get
            {
                if (User != null)
                    return !string.IsNullOrWhiteSpace(User.Email);
                else
                    return false;
            }
        }

        public static Action SuccessfulLoginAction
        {
            get
            {
                return new Action(() =>
                {
                    NavPage.Navigation.PopModalAsync();

                    if (IsLoggedIn)
                    {
                        // Update RestService with new token
                        UserManager = new UserManager(new RestService());
                        VolunteerManager = new VolunteerManager(new RestService());
                        SignupManager = new SignupManager(new RestService());

                        NavPage.Navigation.InsertPageBefore(new VolunteerDashboardPage(), NavPage.Navigation.NavigationStack.First());
                        NavPage.Navigation.PopToRootAsync();
                    }
                });
            }
        }

        public static Action LogoutAction
        {
            get
            {
                return new Action(() =>
                {
                    DependencyService.Get<ICredentialsService>().DeleteCredentials();
                    App.User = null;
                    // NavPage.Navigation.PopModalAsync();
                    NavPage.Navigation.InsertPageBefore(new LoginPage(), NavPage.Navigation.NavigationStack.First());
                    NavPage.Navigation.PopToRootAsync();
                });
            }
        }

        public App()
        {
            User = new User();
            UserManager = new UserManager(new RestService());
            VolunteerManager = new VolunteerManager(new RestService());
            SignupManager = new SignupManager(new RestService());

            // AWS SDK
            var loggingConfig = AWSConfigs.LoggingConfig;
            loggingConfig.LogMetrics = true;
            loggingConfig.LogResponses = ResponseLoggingOption.Always;
            loggingConfig.LogMetricsFormat = LogMetricsFormatOption.JSON;
            loggingConfig.LogTo = LoggingOptions.SystemDiagnostics;

            //AWSConfigs.AWSRegion = "us-east-1";

            // Check if login needed
            if (DependencyService.Get<ICredentialsService>().DoCredentialsExist())
            {
                NavPage = new NavigationPage(new VolunteerDashboardPage());
                MainPage = NavPage;
                // MainPage = new VolunteerDashboardPage();
            } else {
                NavPage = new NavigationPage(new LoginPage());
                MainPage = NavPage;
            }
        }

        protected override void OnStart()
        {
            // Handle when your app starts
        }

        protected override void OnSleep()
        {
            // Handle when your app sleeps
        }

        protected override void OnResume()
        {
            // Handle when your app resumes
        }
    }
}

I had simular problem. 我有类似的问题。 I created app(Android) with Xamarin Forms 2.3.1.114. 我使用Xamarin Forms 2.3.1.114创建了应用程序(Android)。 I use Master-Detail page. 我使用Master-Detail页面。 After restore app I get this error: 恢复应用程序后,我收到此错误:

java.lang.IllegalStateException: Fragment does not have a view java.lang.IllegalStateException:Fragment没有视图

I tryed Xamarin Forms 2.3.2.118-pre1. 我试过Xamarin Forms 2.3.2.118-pre1。 It is fixed this bug(42075), but add new bugs(it is pre package). 它修复了这个错误(42075),但添加了新的错误(它是预包装)。 I installed Xamarin Forms 2.3.0.107(downgrade). 我安装了Xamarin Forms 2.3.0.107(降级)。 It is work for me. 这对我有用。 Hope this help for you. 希望对您有所帮助。

Adding nuget package AndroidX.Fragment version "1.2.5.4" worked for me.添加 nuget package AndroidX.Fragment 版本“1.2.5.4”对我有用。 Able to reproduce only if i select developer options -> Don't keep activities仅当我 select 开发人员选项时才能重现 -> 不要保留活动

This question is over 5 years old but this continues to be a problem in 2022 with Xamarin.Forms 5.x in a slightly different setup这个问题已经有 5 年多了,但这在 2022 年仍然是一个问题,Xamarin.Forms 5.x 的设置略有不同

I've got this happening quite a lot in a production app that was recently pushed to store.我在最近推送到商店的生产应用程序中经常发生这种情况。 Replicating this issue manually in the real world is quite difficult from but sending the app to the background and executing:在现实世界中手动复制此问题非常困难,但是将应用程序发送到后台并执行:

adb shell "am kill <package-name>"

...and then tapping on the app from the launcher would immediately cause this crash. ...然后从启动器中点击应用程序会立即导致崩溃。

My app references Xamarin.AndroidX.Biometric version 1.1.0.6 (the most latest as of March 2022) and this pulls in Xamarin.AndroidX.Fragment version 1.3.6.3 and Xamarin.AndroidX.Activity 1.3.1.2 as transitive dependencies.我的应用程序引用Xamarin.AndroidX.Biometric版本1.1.0.6 (截至 2022 年 3 月的最新版本),这引入了Xamarin.AndroidX.Fragment版本1.3.6.3Xamarin.AndroidX.Activity 1.3.1.2作为传递依赖项。

Downgrading these 2 nugets by manually installing Xamarin.AndroidX.Fragment version 1.2.54 and Xamarin.AndroidX.Activity 1.2.2 resolves this according to comments on open issue: https://github.com/xamarin/Xamarin.Forms/issues/14193 .通过手动安装Xamarin.AndroidX.Fragment版本1.2.54Xamarin.AndroidX.Activity 1.2.2降级这两个 nugets 根据对未解决问题的评论解决了这个问题: https://github.com/xamarin/Xamarin.Forms/issues/ 14193

The 'solution' is far from ideal so watch the linked github issue for more updates in the future. “解决方案”远非理想,因此请关注链接的 github 问题,了解未来的更多更新。

Hope this helps someone having a similar setup希望这可以帮助具有类似设置的人

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 随机异常java.lang.IllegalStateException:片段没有视图 - Random exception java.lang.IllegalStateException: Fragment does not have a view java.lang.IllegalStateException ConstraintLayout 没有为片段设置 NavController - java.lang.IllegalStateException ConstraintLayout does not have a NavController set for a fragment 片段中的 java.lang.IllegalStateException - java.lang.IllegalStateException in fragment java.lang.IllegalStateException:Fragment - java.lang.IllegalStateException: Fragment Android java.lang.IllegalStateException:已添加片段 - Android java.lang.IllegalStateException: Fragment already added java.lang.illegalstateexception在activity类的android片段中找不到方法(view) - java.lang.illegalstateexception could not find a method (view) in the activity class android fragment Android中的java.lang.IllegalStateException - java.lang.IllegalStateException In Android android中的java.lang.IllegalStateException? - java.lang.IllegalStateException in android? java.lang.IllegalStateException:片段未附加到android中的Activity问题 - java.lang.IllegalStateException: Fragment not attached to Activity issue in android android - java.lang.IllegalStateException:片段未附加到上下文 - android - java.lang.IllegalStateException: Fragment not attached to a context
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM