如何在一个片段中增加不同的视图

问题描述 投票:0回答:1

使用Java代码中的片段,我检查了用户是否已登录到他的Firebase帐户,如果他已经登录,则显示正确的视图,否则显示“您尚未登录”片段被夸大。

public View onCreateView(LayoutInflater inflater, final ViewGroup container,
                         Bundle savedInstanceState) {
    FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
    if (user != null) {
        /**
         * USER IS SIGNED IN
          */

        View view = inflater.inflate(R.layout.fragment_calendar, container, false);
        return view;
       } else {
         /**
         * NO USER IS SIGNED IN
         */

        View view = inflater.inflate(R.layout.fragment_unregistred, container, false);
        return view;
        }
      }

现在在Kotlin中执行此操作似乎并不像应该做的那样容易,它说不允许在与Java中相同的位置使用“返回”:

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                          savedInstanceState: Bundle?): View? {

    if(getUID.requestUserExistence() != null) {
        FirebaseAuth.getInstance().currentUser!!.getIdToken(true).addOnCompleteListener{task ->
            if(task.isSuccessful) {

                val view = inflater.inflate(R.layout.fragment_crackthecode, container, false)

                return view


            }
        }
    }
}

所以为什么会这样?

android-fragments kotlin view layout-inflater
1个回答
0
投票
Kotlin中的

运算符ifexpression。考虑到您的情况,我们可以将其重写如下:

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                          savedInstanceState: Bundle?): View? {

    val user = FirebaseAuth.getInstance().getCurrentUser()
    return if (user != null) {
        inflater.inflate(R.layout.fragment_calendar, container, false)
    } else {
        inflater.inflate(R.layout.fragment_unregistred, container, false)
    }
}

[考虑您在Kotlin中的第二个示例,它看起来与Java不同:有一个CompleteListener,您不能使用它返回View方法的onCreateView。如果您用Java重写相同的代码,并添加CompleteListener,则会得到相同或相似的错误,并且您的代码将不会被编译。

© www.soinside.com 2019 - 2024. All rights reserved.