如何在片段中膨胀不同的视图
How to inflate different views in a fragment
在我的 Java 代码中处理片段 我检查了用户是否登录到他的 Firebase 帐户,如果他登录了,他会显示正确的视图,否则 "You are not logged in" 片段得到膨胀了。
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 中这样做似乎并不像它应该的那么容易,它说 "return" 不允许出现在与我在 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
}
}
}
}
为什么会这样?
运算符 if 在 Kotlin 中是一个 expression。考虑到您的情况,我们可以将其重写为:
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
,您不能将其用于 return View
用于 onCreateView
方法。如果你想要 return 来自 onCreateView
方法的变量,你不应该 return 来自回调(侦听器)方法的变量。如果您在 Java 中重写相同的代码,添加 OnCompleteListener
,您将得到相同或相似的错误,您的代码将不会被编译。
在我的 Java 代码中处理片段 我检查了用户是否登录到他的 Firebase 帐户,如果他登录了,他会显示正确的视图,否则 "You are not logged in" 片段得到膨胀了。
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 中这样做似乎并不像它应该的那么容易,它说 "return" 不允许出现在与我在 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
}
}
}
}
为什么会这样?
运算符 if 在 Kotlin 中是一个 expression。考虑到您的情况,我们可以将其重写为:
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
,您不能将其用于 return View
用于 onCreateView
方法。如果你想要 return 来自 onCreateView
方法的变量,你不应该 return 来自回调(侦听器)方法的变量。如果您在 Java 中重写相同的代码,添加 OnCompleteListener
,您将得到相同或相似的错误,您的代码将不会被编译。