アクション バーにアクション アイテムとして [ Enter you details ] オプションがあり、以下のクラスを拡張することで、すべてのアクティビティでそのオプションが表示されるように設定しています。
public abstract class ActionActivity extends SherlockActivity {
protected boolean mIsEnterDetailsScreen = true;
protected userName = "";
SessionManager session;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
if(mIsEnterDetailsScreen)
{
menu.add("Enter Your Details")
.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
}
else
{
menu.add(userName)
.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
}
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
//This uses the imported MenuItem from ActionBarSherlock
switch(item.getItemId())
{
case 0:
Intent intent = new Intent(ActionActivity.this,EnterDetails.class);
startActivity(intent);
return true;
}
return false;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
session = new SessionManager(getApplicationContext());
sessionCheck(); // This method's body is separated for the easiness and pasted below.
super.onCreate(savedInstanceState);
getSupportActionBar().setHomeButtonEnabled(true);
}
}
したがって、上記のコードでは、ユーザーが詳細を入力すると、それを設定に保存すると同時にmIsEnterDetailsScreen = false;
、このオプションが非表示になり、入力された詳細から取得されたユーザー名が表示されるように設定します。これは、後で開始されるアクティビティに対してのみ正常に機能します。しかし、以前の活動ではありません。だから、私の疑問は、バックスタックにあるアクティビティをリフレッシュする方法です。そのため、戻るボタンを押しても、詳細を入力するusername
オプションの代わりに詳細を入力した後、前のアクティビティでも表示する必要があります。
ユーザーが3 番目のアクティビティで [ Enter you details ] アクション アイテムをクリックすると、変更は後のアクティビティ (4、5、6....) に反映されますが、1 番目のアクティビティと 2 番目のアクティビティには反映されないとします。変更が持続するようにアクティビティを更新する方法はありますか?
これは ActionActivity の sessionCheck() メソッドです
public void sessionCheck()
{
if(session.isLoggedIn())
{
mIsEnterDetailsScreen = false;
HashMap<String, String> userHashMap = session.getUserDetails();
// name
String name = userHashMap.get(SessionManager.KEY_USER_NAME);
userName = name;
}
else{
mIsEnterDetailsScreen = true;
}
}