-1

Ich bin neu in Firebase und Entwicklungsdingen, ich habe eine App mit Firebase erstellt und ihm eine Methode zum An- und Abmelden gegeben, aber in einer Aktivität möchte ich die Abmeldung und andere Konten Einstellungen, die durch das OverFlow-Menü vorgenommen werden sollen, wenn möglich.Implementierung von Firebase-Kontoeinstellungen im OverFlow-Menü

Code Of Aktivität, die ich bei Überlauf-Menü implementieren möchten:

import android.content.Intent; 
import android.os.Bundle; 
import android.support.annotation.NonNull; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.ProgressBar; 
import android.widget.Toast; 

import com.google.android.gms.tasks.OnCompleteListener; 
import com.google.android.gms.tasks.Task; 
import com.google.firebase.auth.FirebaseAuth; 
import com.google.firebase.auth.FirebaseUser; 

public class MainActivity extends AppCompatActivity { 

private Button btnChangeEmail, btnChangePassword, btnSendResetEmail, btnRemoveUser, 
     changeEmail, changePassword, sendEmail, remove, signOut; 

private EditText oldEmail, newEmail, password, newPassword; 
private ProgressBar progressBar; 
private FirebaseAuth.AuthStateListener authListener; 
private FirebaseAuth auth; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    toolbar.setTitle(getString(R.string.app_name)); 
    setSupportActionBar(toolbar); 

    //get firebase auth instance 
    auth = FirebaseAuth.getInstance(); 

    //get current user 
    final FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); 

    authListener = new FirebaseAuth.AuthStateListener() { 
     @Override 
     public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { 
      FirebaseUser user = firebaseAuth.getCurrentUser(); 
      if (user == null) { 
       // user auth state is changed - user is null 
       // launch login activity 
       startActivity(new Intent(MainActivity.this, LoginActivity.class)); 
       finish(); 
      } 
     } 
    }; 

    btnChangeEmail = (Button) findViewById(R.id.change_email_button); 
    btnChangePassword = (Button) findViewById(R.id.change_password_button); 
    btnSendResetEmail = (Button) findViewById(R.id.sending_pass_reset_button); 
    btnRemoveUser = (Button) findViewById(R.id.remove_user_button); 
    changeEmail = (Button) findViewById(R.id.changeEmail); 
    changePassword = (Button) findViewById(R.id.changePass); 
    sendEmail = (Button) findViewById(R.id.send); 
    remove = (Button) findViewById(R.id.remove); 
    signOut = (Button) findViewById(R.id.sign_out); 

    oldEmail = (EditText) findViewById(R.id.old_email); 
    newEmail = (EditText) findViewById(R.id.new_email); 
    password = (EditText) findViewById(R.id.password); 
    newPassword = (EditText) findViewById(R.id.newPassword); 

    oldEmail.setVisibility(View.GONE); 
    newEmail.setVisibility(View.GONE); 
    password.setVisibility(View.GONE); 
    newPassword.setVisibility(View.GONE); 
    changeEmail.setVisibility(View.GONE); 
    changePassword.setVisibility(View.GONE); 
    sendEmail.setVisibility(View.GONE); 
    remove.setVisibility(View.GONE); 

    progressBar = (ProgressBar) findViewById(R.id.progressBar); 

    if (progressBar != null) { 
     progressBar.setVisibility(View.GONE); 
    } 

    btnChangeEmail.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      oldEmail.setVisibility(View.GONE); 
      newEmail.setVisibility(View.VISIBLE); 
      password.setVisibility(View.GONE); 
      newPassword.setVisibility(View.GONE); 
      changeEmail.setVisibility(View.VISIBLE); 
      changePassword.setVisibility(View.GONE); 
      sendEmail.setVisibility(View.GONE); 
      remove.setVisibility(View.GONE); 
     } 
    }); 

    changeEmail.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      progressBar.setVisibility(View.VISIBLE); 
      if (user != null && !newEmail.getText().toString().trim().equals("")) { 
       user.updateEmail(newEmail.getText().toString().trim()) 
         .addOnCompleteListener(new OnCompleteListener<Void>() { 
          @Override 
          public void onComplete(@NonNull Task<Void> task) { 
           if (task.isSuccessful()) { 
            Toast.makeText(MainActivity.this, "Email address is updated. Please sign in with new email id!", Toast.LENGTH_LONG).show(); 
            signOut(); 
            progressBar.setVisibility(View.GONE); 
           } else { 
            Toast.makeText(MainActivity.this, "Failed to update email!", Toast.LENGTH_LONG).show(); 
            progressBar.setVisibility(View.GONE); 
           } 
          } 
         }); 
      } else if (newEmail.getText().toString().trim().equals("")) { 
       newEmail.setError("Enter email"); 
       progressBar.setVisibility(View.GONE); 
      } 
     } 
    }); 

    btnChangePassword.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      oldEmail.setVisibility(View.GONE); 
      newEmail.setVisibility(View.GONE); 
      password.setVisibility(View.GONE); 
      newPassword.setVisibility(View.VISIBLE); 
      changeEmail.setVisibility(View.GONE); 
      changePassword.setVisibility(View.VISIBLE); 
      sendEmail.setVisibility(View.GONE); 
      remove.setVisibility(View.GONE); 
     } 
    }); 

    changePassword.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      progressBar.setVisibility(View.VISIBLE); 
      if (user != null && !newPassword.getText().toString().trim().equals("")) { 
       if (newPassword.getText().toString().trim().length() < 6) { 
        newPassword.setError("Password too short, enter minimum 6 characters"); 
        progressBar.setVisibility(View.GONE); 
       } else { 
        user.updatePassword(newPassword.getText().toString().trim()) 
          .addOnCompleteListener(new OnCompleteListener<Void>() { 
           @Override 
           public void onComplete(@NonNull Task<Void> task) { 
            if (task.isSuccessful()) { 
             Toast.makeText(MainActivity.this, "Password is updated, sign in with new password!", Toast.LENGTH_SHORT).show(); 
             signOut(); 
             progressBar.setVisibility(View.GONE); 
            } else { 
             Toast.makeText(MainActivity.this, "Failed to update password!", Toast.LENGTH_SHORT).show(); 
             progressBar.setVisibility(View.GONE); 
            } 
           } 
          }); 
       } 
      } else if (newPassword.getText().toString().trim().equals("")) { 
       newPassword.setError("Enter password"); 
       progressBar.setVisibility(View.GONE); 
      } 
     } 
    }); 

    btnSendResetEmail.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      oldEmail.setVisibility(View.VISIBLE); 
      newEmail.setVisibility(View.GONE); 
      password.setVisibility(View.GONE); 
      newPassword.setVisibility(View.GONE); 
      changeEmail.setVisibility(View.GONE); 
      changePassword.setVisibility(View.GONE); 
      sendEmail.setVisibility(View.VISIBLE); 
      remove.setVisibility(View.GONE); 
     } 
    }); 

    sendEmail.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      progressBar.setVisibility(View.VISIBLE); 
      if (!oldEmail.getText().toString().trim().equals("")) { 
       auth.sendPasswordResetEmail(oldEmail.getText().toString().trim()) 
         .addOnCompleteListener(new OnCompleteListener<Void>() { 
          @Override 
          public void onComplete(@NonNull Task<Void> task) { 
           if (task.isSuccessful()) { 
            Toast.makeText(MainActivity.this, "Reset password email is sent!", Toast.LENGTH_SHORT).show(); 
            progressBar.setVisibility(View.GONE); 
           } else { 
            Toast.makeText(MainActivity.this, "Failed to send reset email!", Toast.LENGTH_SHORT).show(); 
            progressBar.setVisibility(View.GONE); 
           } 
          } 
         }); 
      } else { 
       oldEmail.setError("Enter email"); 
       progressBar.setVisibility(View.GONE); 
      } 
     } 
    }); 

    btnRemoveUser.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      progressBar.setVisibility(View.VISIBLE); 
      if (user != null) { 
       user.delete() 
         .addOnCompleteListener(new OnCompleteListener<Void>() { 
          @Override 
          public void onComplete(@NonNull Task<Void> task) { 
           if (task.isSuccessful()) { 
            Toast.makeText(MainActivity.this, "Your profile is deleted:(Create a account now!", Toast.LENGTH_SHORT).show(); 
            startActivity(new Intent(MainActivity.this, SignupActivity.class)); 
            finish(); 
            progressBar.setVisibility(View.GONE); 
           } else { 
            Toast.makeText(MainActivity.this, "Failed to delete your account!", Toast.LENGTH_SHORT).show(); 
            progressBar.setVisibility(View.GONE); 
           } 
          } 
         }); 
      } 
     } 
    }); 

    signOut.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      signOut(); 
     } 
    }); 

} 

//sign out method 
public void signOut() { 
    auth.signOut(); 
} 

@Override 
protected void onResume() { 
    super.onResume(); 
    progressBar.setVisibility(View.GONE); 
} 

@Override 
public void onStart() { 
    super.onStart(); 
    auth.addAuthStateListener(authListener); 
} 

@Override 
public void onStop() { 
    super.onStop(); 
    if (authListener != null) { 
     auth.removeAuthStateListener(authListener); 
    } 
} 
} 

Image:

!Check this] 1

Antwort

1

Wenn Sie Ihr Symbol in den Überlauf zu erzwingen, müssen Sie hinzufügen app:showAsAction="never" zu Ihrem <item> Tag in Ihrem Menü XML-Datei. ZB:

<item 
    app:showAsAction="never" 
    android:title="" 
    android:icon="@drawable/icon" 
    android:id="@+id/icon" 
    /> 

Wenn Sie nicht einmal die Menü Aktionen haben Sie folgendermaßen vor:

Schritt 1: Erstellen Sie das XML-Menü Rechts auf res Verzeichnis klicken, wählen Sie Neu> Android Resource Directory . Setzen Sie den Ressourcennamen auf Menü und fügen Sie einen Namen hinzu. Erstellen Sie jetzt eine menu.xml, wenn sie nicht automatisch erstellt wurde, und fügen Sie alle benötigten Elemente hinzu. Zum Beispiel für eine ausloggen Schaltfläche im Überlaufmenü:

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto"> 
<item 
    android:title="@string/logout" 
    app:showAsAction="always" 
    android:id="@+id/logout" 

    /> 
</menu> 

The showAsIcon Attribut als `nie‘ macht es zeigt immer in dem Überlauf.

Schritt 2: aufblasen und geben Aktionen: onCreateOptions Menü außer Kraft setzen, so dass Sie Ihre Menüs erstellen:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    //Inflate the menu.xml you created: 
    inflater.inflate(R.menu.menu_cno, menu); 
    return super.onCreateOptionsMenu(menu); 
} 

Schritt 3: Stellen Sie die Rückrufe:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle item selection 
    switch (item.getItemId()) { 
     //The id of the <item> tag we created was logout, so, if the user clicks on an item with the id logout, we call on doWhateverYouWant(), in your case, doWhateverYouWant() is you logout method. 
     case R.id.logout: 
      doWhateverYouWant(); 
      break; 
     default: 
      return super.onOptionsItemSelected(item); 
    } 
    return false; 

} 

Du bist erledigt.

+0

Danke! Ich habe irgendwo erreicht :) aber was ich gemacht habe, war ein Knopf Klick Ereignis der Unterzeichnung Ich möchte, dass es ein Menü Klick-Ereignis, wie wenn ich klicke Abmeldung sollte es mich aus dem Überlaufmenü selbst abmelden, wo als Abmeldung Dies ist nur ein Fall von onOptionsSelection. –

+0

Wenn Sie eine 'menu.xml' hinzugefügt und in' onCreateOptionsMenu' aufgebläht haben, sollte sie die Symbole zu Ihrer Aktionsleiste/Symbolleiste hinzugefügt haben. Dann, in 'onOptionsItemSelected', anstelle von' doWhateverYouWant', legen Sie Ihre Abmelde-Sachen. –

+0

Wenn du etwas anderes willst, dann sei bitte klarer. –