我需要一些帮助来刷新我的应用程序中的一个活动。我正在使用标签主机活动并连接到Web服务并从我的一个子活动中下载一些数据。当我在我的子活动中按下同步按钮时,我正在开始一个不在标签主机中的新活动,当同步完成后,它将返回到它的父项(子活动)。我想要实现的是当我返回它时刷新活动。当我通过互联网查看时,我发现最好的选择是使用startActivityForResult
,但我真的不明白如何使用它,以及当我从完成的活动中收到结果时如何刷新活动。
如果有人能帮助我,我会很高兴。谢谢!
编辑:
我正在使用此代码,它甚至没有显示登录onActivityResult
MyCollectionId.class:
Intent intent = new Intent(MyCollectionId.this, Synchronization.class);
intent.putExtra("process", 2);
startActivityForResult(intent, 1);
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode==RESULT_OK){
Log.e("","OnActivityResult");
Intent refresh = new Intent(this, MyCollectionId.class);
startActivity(refresh);
this.finish();
}
}
Synchronization.class:
Intent intent = new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
setResult(RESULT_OK,intent);
finish();
答案 0 :(得分:23)
:
Intent intent = new Intent(this, SyncActivity.class);
//intent.putExtra("someData", "Here is some data");
startActivityForResult(intent, 1);
然后在同一个Activity类中:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode==RESULT_OK){
Intent refresh = new Intent(this, InitialActivity.class);
startActivity(refresh);
this.finish();
}
}
同步活动将包含:
setResult(RESULT_OK, null);
finish();
答案 1 :(得分:10)
另一种棘手的方法是在onRestart()
@Override
public void onRestart(){
super.onRestart();
Intent previewMessage = new Intent(StampiiStore.this, StampiiStore.class);
TabGroupActivity parentActivity = (TabGroupActivity)getParent();
parentActivity.startChildActivity("StampiiStore", previewMessage);
this.finish();
}
实际应该这样做。 (在此代码中,我将展示使用自定义TabActivity管理器时的方式。)
答案 2 :(得分:4)
您应该在方法的父活动中处理以“startActivityForResult”开头的活动结果:
@override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
//...
}
根据结果,您可以再次调用一个代码,该代码负责显示父活动中的信息(可能是您将其放入onResume()方法或类似)。
我建议您将负责信息呈现的所有逻辑移到单独的方法中。并在收到结果后调用它。而不是重新启动您的父活动。
答案 3 :(得分:3)
如果您使用startActivityForResult
方法开始第二项活动,当您返回第一项活动时,系统会调用第一项活动的onActivityResult
。
如果您覆盖它,则可以从那里刷新您的活动。
答案 4 :(得分:2)
使用带有请求代码的startActivityForResult调用子活动,从子Activity调用SetResult。当子活动完成后,您可以在onActivityResult方法
中更新父活动@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
//Check the result and request code here and update ur activity class
}
以下是http://rahulonblog.blogspot.com/2010/05/android-startactivityforresult-example.html
的示例答案 5 :(得分:0)
在要刷新的活动中覆盖onRestart()
方法,然后重新创建活动
@Override
protected void onRestart() {
super.onRestart();
this.recreate();
}
答案 6 :(得分:0)
覆盖
onRestart()
方法,以便当您从所需任务返回时自动被调用。
在您的onRestart()方法中放置以下代码:
@Override
protected void onRestart() {
super.onRestart();
finish();
overridePendingTransition(0, 0);
startActivity(getIntent());
overridePendingTransition(0, 0);
}