J'apprends comment créer une application et ai trouvé comment créer une activité de connexion et un menu de déconnexion qui vous renvoie à la disposition de connexion. Cependant, si je navigue à travers mes différentes dispositions/activités, l'élément de menu pour la déconnexion des doublons. Je crois que c'est dû au fait que le menu a été créé sur chaque mise en page, mais je ne suis pas sûr de savoir comment le changer pour qu'il ne soit pas dupliqué.Lorsque j'ouvre de nouvelles mises en page, l'élément de menu duplique
Voici mon fragment.
public class UserFragment extends Fragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle
savedInstanceState) {
return inflater.inflate(R.layout.activity_user_fragment, container, false);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.fragment_logout, menu);
}
}
Mon LoginActivity.class
public class LoginActivity extends AppCompatActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
Button b1login = (Button) findViewById(R.id.btlogin);
Button b2login_cancel = (Button) findViewById(R.id.btcancel_login);
assert b1login != null;
b1login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
EditText ed1 = (EditText) findViewById(R.id.etuser_name);
EditText ed2 = (EditText) findViewById(R.id.etpassword);
if (ed1.getText().toString().equals(getText(R.string.user_id)) &&
ed2.getText().toString().equals(getText(R.string.user_password))) {
Toast.makeText(getApplicationContext(), R.string.successful_login,
Toast.LENGTH_SHORT).show();
setContentView(R.layout.activity_clients);
} else {
Toast.makeText(getApplicationContext(), R.string.unsuccessful_login,
Toast.LENGTH_SHORT).show();
}
}
});
assert b2login_cancel != null;
b2login_cancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
System.exit(0);
}
});
}
//Menu option logout return to login screen.
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.menu_item_logout) {
Intent i = new Intent(this, LoginActivity.class);
this.startActivity(i);
return true;
}
return super.onOptionsItemSelected(item);
}
public void addClient(View view) {
setContentView(R.layout.activity_new_client);
}
public void submitClient(View view) {
setContentView(R.layout.activity_sessions);
}
public void cancelClient(View view) {
setContentView(R.layout.activity_clients);
}
public void newSession(View view) {
setContentView(R.layout.activity_new_session);
}
public void cancelSessionCompletion(View view) {
setContentView(R.layout.activity_sessions);
}
public void cancelSession(View view) {
setContentView(R.layout.activity_sessions);
}
}
mise en page de Fragment.
<menu
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/menu_item_logout"
android:icon="@drawable/ic_logout"
android:title="@string/logout"
app:showAsAction="ifRoom|withText" />
</menu
EDIT:
J'ai supprimé le fragment où j'ai d'abord créé le menu ainsi que le code de menu du UserFragment et codé en dur le menu lui-même dans la classe LoginActivity, qui fixe la question de la duplication.
Code d'ajout de code.
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
getMenuInflater().inflate(R.menu.menu, menu);
return true;
}
Cependant, le menu s'affiche maintenant sur l'écran de connexion. Comment est-ce que je l'empêche de montrer là?
Oui, je suis sûr que vous ne voulez pas de menu Déconnexion dans votre LoginActivity, car à ce moment-là, l'utilisateur n'est même pas connecté? – Eenvincible
Le menu n'apparaît pas sur l'écran de connexion car je l'ai configuré pour charger le fragment qui affiche le nom d'utilisateur de l'utilisateur lorsqu'il est connecté. – Xiokraze
Maintenant que j'ai résolu le problème de duplication, il apparaît sur l'écran de connexion. Des idées? – Xiokraze