私はアプリを作成する方法を学び、ログインアクティビティを構築する方法とログインレイアウトに戻るためのログアウトメニューを作成しました。しかし、異なるレイアウトやアクティビティーをナビゲートすると、ログアウトするためのメニュー項目が重複して表示されます。私はそれが各レイアウトでメニューを作成することによると信じていますが、重複しないように変更する方法がわかりません。新しいレイアウトを開くとメニュー項目が複製されます
ここに私の断片です。
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);
}
}
マイ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);
}
}
フラグメントレイアウト。
<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:
は私が最初にメニューならびにUserFragmentからメニューコードを作成し、ハード重複の問題を修正LoginActivityクラスにメニュー自体を符号化された断片を削除しました。
コード追加メニュー。
ただし、ログイン画面にメニューが表示されるようになりました。どうやってそこに表示されないようにしますか?ここで
あなたはLoginActivityにログアウトメニューが表示されないようにしてください。 – Eenvincible
ログインしたときにユーザーのユーザー名を表示する部分が読み込まれるように設定されているため、メニューはログイン画面に表示されません。 – Xiokraze
重複の問題を修正したので、ログイン画面に表示されます。何か案は? – Xiokraze