0

アクション バーにアクション アイテムとして [ 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;


         }

     }
4

2 に答える 2

1

ユーザーが詳細を入力したら、永続的な場所に保存します。SharedPreferencesを使用することをお勧めします。次にonResume、バックスタックにあるアクティビティをオーバーライドし、そこに詳細(SharedPreferencesたとえば)をロードします。

onRefreshAndroidはメソッドを使用しません。

于 2013-01-07T04:41:30.400 に答える
0

最初のアクティビティでoverrideメソッドonRefreshを実装する必要があります。

詳細アクティビティから戻るか、2番目のアクティビティ(つまり、Enter Your Detailsアクティビティ)を閉じる/終了すると、最初のアクティビティのonRefreshメソッドが呼び出されます。その時点で、SharedPreferenceから値を設定できます。したがって、そのようにして、ビューで値を再配置することができます。

あなたが私の主張を理解したことを願っています。コメントはお気軽に。

于 2013-01-07T04:17:32.427 に答える