使用带有firebase的项目菜单,SignOut无法在Fragment中工作

时间:2017-09-14 14:18:45

标签: android android-fragments firebase firebase-authentication menuitem

这是我的个人资料片段,我在其主要活动中有三个。 在这里,我使用注销功能,但它无法正常工作。

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);
}

我想从片段中注销。我有三个底部导航,但退出没有发生它应该是对LogInActivity的意图。

请帮我解决这个问题。

2 个答案:

答案 0 :(得分:1)

我不相信注销不起作用。可能是因为android会保存活动状态。

正如您在点击注销时所说,您想要启动loginActivity。您可以通过从后台堆栈中删除所有活动来执行此操作。

要做到这一点,请使用它。

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;

OR

对于 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 :我没有测试过,如果有任何错误请问我

答案 1 :(得分:0)

您需要更改以下代码行:

firebaseAuth.getInstance().signOut();

FirebaseAuth.getInstance().signOut();