当Android返回到活动时刷新活动

16
我需要帮助刷新我的应用程序中的一个活动。我正在使用选项卡主机活动,连接到 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();

“it's not even showing the Log in” 的意思是什么? - user849998
我的意思是这个日志:Log.e("","OnActivityResult"); - Android-Droid
尝试在if条件语句之前移动它。 - user849998
你可以尝试在同步中更改为 setResult(1); finish();,这样就不需要发送意图了。 - user849998
仅返回翻译文本:相同的结果,不显示 onActivityResult() - Android-Droid
显示剩余2条评论
7个回答

25

在按钮按下时:

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
这是一个非常完整的答案。 - IgniteCoders
问题:为什么在onActivityResult方法中不使用recreate(); - grolschie

12

另一种解决这个问题的巧妙方法就是在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管理器时的操作方式。)


4
你应该在父Activity中的一个方法中处理使用"startActivityForResult"启动的Activity的结果:
@override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
   //...
}

根据结果,您可以再次调用负责在父活动中显示信息的代码(可能将其放入onResume()方法或类似位置)。

我建议您将所有负责信息渲染的逻辑移动到一个单独的方法中。并在接收到结果后调用它。而不是重新启动父活动。


只需更新我的答案,使用我正在使用的代码,但它甚至没有在我的onActivityResult中显示日志。 - Android-Droid

3
如果您使用startActivityForResult方法启动第二个活动,则当您返回到第一个活动时,第一个活动的onActivityResult方法将被调用。
如果您覆盖该方法,则可以从那里刷新您的活动。
更多信息请参见这里这里

2
使用startActivityForResult方法调用子活动,并设置请求代码,从子活动中使用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

这个链接是一个关于Android技术中startActivityForResult的示例。

1

在希望刷新并重新创建活动的内部重写onRestart()方法

@Override
protected void onRestart() {
    super.onRestart();
    this.recreate();
}

1

覆盖

onRestart()

方法,使其在从所需任务返回时自动调用。

将以下代码放入您的 onRestart() 方法中:

@Override
protected void onRestart() {
    super.onRestart();
    finish();
    overridePendingTransition(0, 0);
    startActivity(getIntent());
    overridePendingTransition(0, 0);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接