【问题标题】:Refreshing the activities that are present in the back stack刷新后台堆栈中存在的活动
【发布时间】:2013-01-07 04:07:49
【问题描述】:

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

   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; 以便此选项不可见,并且从他输入的详细信息中获取的用户名将可见.这仅适用于稍后开始的活动。但不是关于以前的活动。所以,我的疑问是如何刷新后台堆栈中的活动。这样即使他按下后退按钮,在他输入详细信息而不是 Enter you details 选项后,即使在以前的活动中也必须显示 username

假设如果用户在第 3 个活动上单击 Enter you details 操作项,更改会反映在后面的活动(4、5、6....)中,但不会反映在第一个活动中和第二个活动。有什么方法可以刷新活动以使更改持续存在。

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


         }

     }

【问题讨论】:

    标签: android android-activity refresh actionbarsherlock


    【解决方案1】:

    当用户输入详细信息时,将它们永久保存在某个地方,我建议使用SharedPreferences。然后在您的活动中覆盖onResume,该活动将在后台堆栈中并在那里加载详细信息(例如来自SharedPreferences)。

    Android 不使用onRefresh 方法。

    【讨论】:

    • 感谢您的回复。正如我在问题中提到的那样,我只使用 SharedPreferences 。我希望这些变化也能反映在当前的活动中。你能推荐一下吗?
    • 要在先前创建的活动的选项菜单中显示更改,您必须使用onPrepareOptionsMenu。您可以在示例中重复使用 onCreateOptionsMenu 中的内容,但您必须从首选项中加载用户名,因为您在之前的活动中没有私有变量。
    • 为您的时间+1。我用额外的代码编辑了我的问题。您现在可以检查一下并提出建议吗?
    【解决方案2】:

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

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

    希望你明白我的意思。 任何 cmets 都可以随意使用。

    【讨论】:

    • 抱歉,没听懂。我希望这些变化也能反映在当前的活动中。
    • 是的,你可以。只需在上一个活动上创建 onRefresh 方法。放置代码来祝酒任何消息。现在只需运行您的应用程序并检查。当您从下一个活动返回到上一个活动时,您将看到吐司显示。希望你明白了。
    猜你喜欢
    • 1970-01-01
    • 2012-12-16
    • 2018-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多