-1

Firebaseと開発の新機能Firebaseを使用してアプリケーションを作成し、ログインとログアウトの方法を指定しましたが、ログアウトやその他のアカウントが必要です可能であればOverFlowメニューで行う設定。OverFlowメニューでのFirebaseアカウント設定の実装

私はオーバーフローメニューに実装したい活動のコード:

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

イメージ:

!Check this] 1

答えて

1

あなたがオーバーフローにあなたのアイコンを強制したい場合は、あなたが追加する必要がありますapp:showAsAction="never"をメニューxmlファイルの<item>タグに追加します。例:

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

あなたも、次の手順を実行し、メニュー・アクションを持っていない場合:

ステップ1:新規> Androidのリソースディレクトリを選択し、あなたのresディレクトリ上のメニューXML右クリックを作成します。リソース名をmenuに設定し、それに名前を追加します。次に、自動的に作成されていない場合はmenu.xmlを作成し、必要なすべての項目を追加します。例えば、オーバーフローメニューのログアウトボタンに対して:

<?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> 

`決して」と設定showAsIcon属性は、それが常にオーバーフローに示します。

ステップ2:アクションを膨らませると与える:あなたのメニューを作成することができますので、onCreateOptionsメニューをオーバーライド:

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

ステップ3:はコールバックを設定します

@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; 

} 

あなたがしています完了しました。

+0

ありがとうございます!私はどこかに到達しました:)しかし、私が作ったのは、ログアウトをクリックすると、ログアウトのメニュー自体からログアウトする必要があるように、メニューのクリックイベントとしてログアウトするボタンクリックイベントでしたこれはonOptionsSelectionの単なるケースです。 –

+0

'menu.xml'を追加し、' onCreateOptionsMenu'でそれを膨張させると、アクションバー/ツールバーにアイコンが追加されているはずです。その後、 'doWhateverYouWant'の代わりに' onOptionsItemSelected'で、あなたのログアウトのものを入れてください。 –

+0

他のものが必要な場合は、より明確にしてください。 –

関連する問題