【问题标题】:SignOut is not working in Fragment using Item Menu with firebase使用带有 Firebase 的项目菜单,SignOut 在 Fragment 中不起作用
【发布时间】:2018-02-23 13:58:53
【问题描述】:

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

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 上。

请帮我解决这个问题。

【问题讨论】:

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


    【解决方案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;
    

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

    【讨论】:

    • Thanx Sahdeep 它可以工作,但你能帮我多一点吗,我只想在 signOut 上添加 AlertDialog Builder。
    • Thanx,但我已经在 onOptionsItemSelected() 中使用你的想法完成了。
    【解决方案2】:

    你需要更改这行代码:

    firebaseAuth.getInstance().signOut();
    

    FirebaseAuth.getInstance().signOut();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-23
      • 1970-01-01
      • 2014-02-03
      相关资源
      最近更新 更多