1

这是我的Profile档案,我在主Activity中有三个。 在这里我使用登出功能,但它不工作。SignOut不能在片段中使用带有Firebase的项目菜单

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意图。

请帮我解决这个问题。

回答

0

您需要更改这一行代码:

firebaseAuth.getInstance().signOut(); 

FirebaseAuth.getInstance().signOut(); 
+0

我已经尝试过,但它不起作用 – faizan

0

我不会相信signout不working.It可能是由于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:我没有测试它,所以如果有任何错误..问我

+0

Thanx Sahdeep它的工作原理,但你可以请帮助我多一点,我只是想补充SignOut上的AlertDialog构建器。 – faizan

+0

@faizan我已经更新了我的答案,它会工作。 –

+0

Thanx,但我已经在onOptionsItemSelected()使用你的想法做到了。 – faizan