首页 > 解决方案 > 用户在片段中的不同视图

问题描述

我正在处理片段,我想检查我的用户是否已注册(在 Firebase 上)或者他是否离线(类似于您可能知道的 Spotify)

无论如何,我正在编写以下代码:

FirebaseAuth mAuth;
private DatabaseReference myRef;
private FirebaseAuth.AuthStateListener mAuthListener;
private FirebaseDatabase mFirebaseDatabase;
private String userID;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
            // Initialize Authentication Object
            mAuth = FirebaseAuth.getInstance();

    if (mAuth.getCurrentUser() != null) {

        View view = inflater.inflate(R.layout.fragment_unregistred, container, true);
        return view;
    } else {
        View view = inflater.inflate(R.layout.fragment_stats, container, true);
        return view;
    }

正如您可能猜到的那样,这给了我一个错误:java.lang.IllegalStateException:指定的孩子已经有一个父母。您必须首先在孩子的父母上调用 removeView()。

对 removeView() 的研究没有让我明白这一点,所以我想这是错误的做法,对吗?

按要求提供完整的崩溃日志:

java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
        at android.view.ViewGroup.addViewInner(ViewGroup.java:4937)
        at android.view.ViewGroup.addView(ViewGroup.java:4768)
        at android.view.ViewGroup.addView(ViewGroup.java:4708)
        at android.view.ViewGroup.addView(ViewGroup.java:4681)
        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1434)
        at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1759)
        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1827)
        at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:797)
        at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2596)
        at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2383)
        at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2338)
        at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2245)
        at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:703)
        at android.os.Handler.handleCallback(Handler.java:790)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6494)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)

标签: javaandroid

解决方案


在获取当前用户的详细信息时,您需要调用getCurrentUser()代码中缺少的方法。请尝试使用下面的代码段:

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
if (user != null) {
    // User is signed in
} else {
    // No user is signed in
}

有关其他信息,如果您需要查看有关如何管理用户相关信息的更多选项,您可以查看官方文档

如果您需要检查用户设备的当前网络状态,您可以查看此线程中的答案

我希望它有所帮助:)


推荐阅读