2015-10-12 25 views
0

我想修复一个IllegalState异常,其中有一些代码在回调代码中弹出碎片的管理器回栈。从我能收集的信息中,避免IllegalState问题的最佳方法不是更改回调中的碎片。如何避免Android中的回调碎片事务

有人可以请推荐一个好的设计解决方案 aka关于如何避免在回调中片段交易的最佳做法?

例如,我们来看看这个简单的情况。

我有一个应用程序需要在服务器上注册用户名,然后才允许用户进入应用程序。所以基本上我有一个活动与一个片段,将采取用户名称,调用服务器和onResponse - 加载另一个活动/片段。在这种情况下,在回调之外进行交易的最佳方式是什么?

我可以看到几个选项,但他们是不是特别大:

选项1:添加一个按钮,进行从回调中变得可见。这样用户需要执行点击以转换到下一个片段。然而,巨大的缺点是不需要额外的点击。

选项2:使用允许状态丢失片段 - 这感觉就像是最后的手段。

肯定有一个体面的方法来解决这个共同的问题?

回答

0

只需添加检查片段是否仍然可见并附加到回调中的活动。例如:

public void onLogin() { 
     yourAPI.login(new Callback<Response>() { 
      @Override 
      public void onResponse(Response response) { 
       // is visible 
       if(isAdded()){ 
       startNextActivity(); 
       } else { 
       // save login data 
       saveResponse(response); 
       } 
      } 
     }); 
    } 

此外,在您的活动onResume()中,您可以添加检查用户是否已经登录到您的应用程序。

@Override 
    public void onResume() { 
     super.onResume(); 
     if(isSavedResponseExists()){ 
      startNextActivity(); 
     } else { 
      showLoginFragment(); 
     } 
    } 
+0

嗨,谢谢你的回应。不幸的是,你提供了一个解决方案,如何避免一个异常,而不是我的实际问题 - 如何避免Android中的回调碎片事务。我的问题是更多的设计问题,而不是实际的代码,但无论如何,谢谢! – vkislicins

0

您可以尝试使用RxAndroid,然后你可能只是从可观察退订的onStop例如为了避免这种泄漏。