第一篇文章,请放心。
我有一个带有少量标签的应用,第一个是在运行应用时打开的。 其中一个标签是“我的帐户”(ListActivity),显示帐户选项。我切换到这个,如果用户没有登录,它反过来使用以下命令运行UserLogon活动:
Intent logonActivity = new Intent(getBaseContext(), UserLogon.class);
startActivityForResult(logonActivity, 0);
要捕获结果,我使用以下代码:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == 0){
MainBlock ta = (MainBlock) this.getParent();
TabHost th = ta.getMyTabHost();
th.setCurrentTab(0);
finish();
}
if (requestCode == 100)
{
showAccountOptions();
}
}
在UserLogon课程中,我有通常的票价; TextView和Button的。目的是如果用户取消登录,它将恢复到初始选项卡,或者如果登录成功,它将显示帐户选项。这确实发生了什么。
到目前为止一切都很好。
我遇到的问题是,如果我取消登录并返回第一个标签,当我再次选择“帐户”标签时,我没有看到UserLogon活动。我的印象是finish()
将关闭UserLogon活动和Accounts活动,但它看起来不会。
所以,我的问题很简单,我如何实际重启帐户活动,以便为用户提供再次登录的选项。
答案 0 :(得分:0)
我们是好人,都愿意帮忙;-)我会试一试。不过,我不太确定我能做到这一点。
基本上你有一个TabActivity,你可以设置它,并在那里做类似的事情:
myTabHost.setOnTabChangedListener(new OnTabChangeListener(){
@Override
public void onTabChanged(String tabId) {
if (tabId.equals("account") && !loggedIn) {
Intent logonActivity = new Intent(getBaseContext(), UserLogon.class);
startActivityForResult(logonActivity, 0);
}
}});
你基本上是说UserLogon的第一个Activity开始工作,但第二个没有,对吧?您是否已调试到该点以检查是否到达了再次启动活动的代码?
根据评论进行更新
您的UserLogon
应该始终提供结果信息,这是蓝图:
public class UserLogon extends Activity {
public void onCreate(Bundle bundle) {
// ... do something ...
// if activity is canceled this will be the "last" result
setResult(RESULT_CANCELED);
}
public void checkLoginOrSomethingLikeThat() {
Intent result = new Intent();
// put your results in this intent
setResult(RESULT_OK, intent);
// close activity since we have the information we need
finish();
}
}
正在等待结果的父活动应该这样做:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// it's good practice to use a constant for 0 like LOGIN_REQUEST
// otherwise you will ask yourself later "What the hell did 0 stand for?"
if(requestCode == 0){
if (resultCode == RESULT_OK) {
// get needed data from data intent and react on that
} else {
// no success, react on that
}
}
// ... I don't know what your resultCode 100 is but handle itwith the same pattern
}