我在操作栏上有一个输入您的详细信息选项作为操作项,我通过扩展下面的类来设置所有活动的选项。
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;
}
}
答案 0 :(得分:1)
当用户输入详细信息时,将其保存在持久性的地方,我建议使用SharedPreferences。然后在活动中覆盖将在backstack中的onResume
并加载详细信息(例如,从SharedPreferences
)。
Android不使用onRefresh
方法。
答案 1 :(得分:0)
您必须在第一个活动上实现覆盖方法onRefresh。
当您关闭从详细信息活动返回或关闭/完成第二个活动(即输入您的详细信息活动)时,将调用第一个活动的onRefresh方法。那时你可以从SharedPreference设置Value。因此,通过这种方式,您可以在视图中反映出值。
希望你明白我的观点。 随意提出任何意见。