java - 使用 FirebaseAuthListener 如果没有用户登录,它将导航到带有片段的活动
问题描述
我在这里要做的是,当我启动我MainActivity
的 withFirebaseAuthListener
并且没有用户登录时,它将导航到 MainFragment 并且MainFragment
是连接到我的容器SignInFragment
(这SignInFragment
是扩展的 Fragment)。所以基本上,MainFragment
被扩展到AppCompatActivity
.
它实际上可以工作,但我的问题是MainFragemnt
我的模拟器中是空白的,它应该显示LoginFragment
.
这是我的代码:MainActivity
类
//Firebase
private FirebaseAuth mAuth;
private FirebaseAuth.AuthStateListener mAuthListener;
private TextView mWelcome;
private Context mContext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mWelcome = findViewById(R.id.tvWelcome);
setupFirebaseAuth();
}
/*
--------------------------------------Firebase-----------------------------------------
*/
private void getCurrentUser(FirebaseUser user){
Log.d(TAG, "getCurrentUser: checking if user is logged in.");
if (user == null){
Intent intent = new Intent(this, MainFragment.class);
startActivity(intent);
}
}
private void setupFirebaseAuth(){
Log.d(TAG, "setupFirebaseAuth: setting up firebase auth.");
mAuth = FirebaseAuth.getInstance();
mAuthListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
//Check if the user is logged in
FirebaseUser user = firebaseAuth.getCurrentUser();
getCurrentUser(user);
if (user != null){
//User is signed in
Log.d(TAG, "onAuthStateChanged: signed _in: " + user.getUid());
} else {
//User is signed out
Log.d(TAG, "onAuthStateChanged: signed_out");
}
}
};
}
@Override
protected void onStart() {
super.onStart();
mAuth.addAuthStateListener(mAuthListener);
}
@Override
protected void onStop() {
super.onStop();
if (mAuthListener != null){
mAuth.removeAuthStateListener(mAuthListener);
}
}
我的代码MainFragment
:
public class MainFragment extends AppCompatActivity {
@Override
public void onCreate(@Nullable Bundle savedInstanceState, @Nullable PersistableBundle persistentState) {
super.onCreate(savedInstanceState, persistentState);
setContentView(R.layout.fragment_main);
SignInFragment fragment = new SignInFragment();
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.container, fragment, null).commit();
我的代码SignInFragment
:
public class SignInFragment extends Fragment {
private static final String TAG = "SignInFragment";
private TextView mEmail, mPassword, mForRegister;
private EditText eEmail, ePassword;
private Button btnLogin;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.signin_fragment,container,false);
//TextView
mEmail = view.findViewById(R.id.tvEmail);
mPassword = view.findViewById(R.id.tvPassword);
mForRegister = view.findViewById(R.id.tvForRegister);
//EditText
eEmail = view.findViewById(R.id.etEmail);
ePassword = view.findViewById(R.id.etPassword);
//Button
btnLogin = view.findViewById(R.id.btnLogin);
//Navigating to RegisterFragment
mForRegister.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FragmentTransaction fr = getFragmentManager().beginTransaction();
fr.replace(R.id.container, new RegisterFragment());
fr.commit();
}
});
return view;
}
这是模拟器的图片:
解决方案
尝试更改您的 onCreate 方法。改用以下内容:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
推荐阅读
- scala - 带有〜函数的Scala Parsing Combinators语法错误
- c# - 属性和字段有什么区别?
- excel - 根据另一张工作表的最后一行向下拖动公式
- jenkins - 如何维护单个 Jenkinsfile 并创建两个具有不同选择参数的 jenkins 作业
- java - Swagger2 配置 spring boot 不起作用
- reactjs - 尝试将网站推送到 vercel 时出现 React 和 Emailjs 错误
- c++ - 使用概念检测空参数包
- vb.net - “无法识别的 lambda 表达式。” 使用 Microsoft.Graph 时
- python - 如何解决每当我尝试查找多个图像的平均 RGB 值时发生的这个轴错误
- node.js - 从 Angular 11 升级到 12 会导致对等依赖冲突