android - 使用带有 firebase 的 Item Menu,SignOut 在 Fragment 中不起作用

标签 android android-fragments firebase firebase-authentication menuitem

这是我的配置文件 fragment ,我在主 Activity 中有三个。 我在这里使用退出功能,但它不起作用。

package com.example.user.transroads;

import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.app.AlertDialog;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;

import com.google.firebase.auth.FirebaseAuth;


public class ProfileFragment extends Fragment {

private FirebaseAuth firebaseAuth;

public static ProfileFragment newInstance() {
    ProfileFragment fragment = new ProfileFragment();
    return fragment;
    // Required empty public constructor
}


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    firebaseAuth = FirebaseAuth.getInstance();
    setHasOptionsMenu(true);
}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    // TODO Add your menu entries here
    super.onCreateOptionsMenu(menu, inflater);
    inflater.inflate(R.menu.item_menu, menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()){
        case R.id.signOut: 
            firebaseAuth.getInstance().signOut();
        return true;
    }
    return super.onOptionsItemSelected(item);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    return inflater.inflate(R.layout.fragment_profile, container, false);
}

我想从 fragment 中注销。我有三个底部导航,但注销没有发生,它应该在 LogInActivity 上。

请帮我解决这个问题。

最佳答案

我不相信注销不起作用。这可能是因为 android 保存了 Activity 状态。

正如您在点击注销时所说的那样,您想要启动 loginActivity。您可以通过从后台堆栈中删除所有 Activity 来实现。

为此使用它。

case R.id.signOut: 
            firebaseAuth.getInstance().signOut();
            Intent i = new Intent(getActivity(), 
            NewActivity.class);
            i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | 
            Intent.FLAG_ACTIVITY_CLEAR_TASK);
            startActivity(i);
        return true;

对于 AlertDialog,您可以在 onCreate() 之外创建一个 alertsignout() 方法,如下所示:

public void alertsignout()
{
           AlertDialog.Builder alertDialog2 = new 
            AlertDialog.Builder(
            getActivity());

             // Setting Dialog Title
            alertDialog2.setTitle("Confirm SignOut");

            // Setting Dialog Message
             alertDialog2.setMessage("Are you sure you want to Signout?");

            // Setting Positive "Yes" Btn
             alertDialog2.setPositiveButton("YES",
             new DialogInterface.OnClickListener() {
             public void onClick(DialogInterface dialog, int which) {
            // Write your code here to execute after dialog
           firebaseAuth.getInstance().signOut();
           Intent i = new Intent(getActivity(), 
            NewActivity.class);
           i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | 
           Intent.FLAG_ACTIVITY_CLEAR_TASK);
           startActivity(i);
        }
    });

              // Setting Negative "NO" Btn
            alertDialog2.setNegativeButton("NO",
            new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
            // Write your code here to execute after dialog
            Toast.makeText(getApplicationContext(),
                           "You clicked on NO", Toast.LENGTH_SHORT)
                    .show();
            dialog.cancel();
        }
    });

          // Showing Alert Dialog
          alertDialog2.show();


}

然后像这样调用这个方法:

case R.id.signOut: 
            alertsignout();
        return true;

PS : 我还没有测试过,所以如果有任何错误..问我

关于android - 使用带有 firebase 的 Item Menu,SignOut 在 Fragment 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46221554/

相关文章:

javascript - 如何在 Firebase 中使用 Angularjs ng-repeat 检索嵌套数据?

java - 如何从 Firestore 中具有特殊字符的文档中获取数据

java - 改造成功电话

android - 从Service发送数据到Fragment,Android

android - 在任何屏幕上通知用户用户未连接到互联网?

android - 在沉浸式粘滞模式下,如何拉伸(stretch) Fragment 的布局以填满屏幕?

java - 如何作为方法的结果返回 DataSnapshot 值?

c# - 尝试打开 Webview 时崩溃 - Xamarin.Forms.Platform.Android.WebViewRender+WebClient

Android 相对布局 : positionning in bottom right

android - 在Android中将位图的大小缩小到指定大小