0

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

   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 次活动和第 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例如)。

Android 不使用onRefresh方法。

于 2013-01-07T04:41:30.400 回答
0

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

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

希望你明白我的意思。随时发表任何评论。

于 2013-01-07T04:17:32.427 回答