使用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
}
}
}
}
所以为什么会这样?
运算符if是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不同:有一个CompleteListener
,您不能使用它返回View
方法的onCreateView
。如果您用Java重写相同的代码,并添加CompleteListener
,则会得到相同或相似的错误,并且您的代码将不会被编译。