【问题标题】:How to inflate different views in a fragment如何在片段中膨胀不同的视图
【发布时间】:2020-04-01 23:31:09
【问题描述】:

在我的 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 kotlin android-fragments view layout-inflater


    【解决方案1】:

    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 不同:有一个 OnCompleteListener,您不能使用它为 onCreateView 方法返回一个 View。如果你想从onCreateView 方法返回一个变量,你不应该从回调的(监听器)方法返回它。如果你用Java重写相同的代码,加上OnCompleteListener,你会得到相同或类似的错误,你的代码不会被编译。

    【讨论】:

      猜你喜欢
      • 2013-07-10
      • 1970-01-01
      • 1970-01-01
      • 2016-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多