刷新后台堆栈中存在的活动

时间:2013-01-07 04:07:49

标签: android android-activity refresh actionbarsherlock

我在操作栏上有一个输入您的详细信息选项作为操作项,我通过扩展下面的类来设置所有活动的选项。

   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项活动中的输入详细信息操作项,则更改会反映在后续活动中(4,5,6 ......),但不会反映在第1项活动中和第二项活动。有没有办法刷新活动,以便更改仍然存在。

这是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;


         }

     }

2 个答案:

答案 0 :(得分:1)

当用户输入详细信息时,将其保存在持久性的地方,我建议使用SharedPreferences。然后在活动中覆盖将在backstack中的onResume并加载详细信息(例如,从SharedPreferences)。

Android不使用onRefresh方法。

答案 1 :(得分:0)

您必须在第一个活动上实现覆盖方法onRefresh。

当您关闭从详细信息活动返回或关闭/完成第二个活动(即输入您的详细信息活动)时,将调用第一个活动的onRefresh方法。那时你可以从SharedPreference设置Value。因此,通过这种方式,您可以在视图中反映出值。

希望你明白我的观点。 随意提出任何意见。