返回时的Android刷新活动

时间:2011-11-23 10:53:28

标签: android android-activity refresh android-tabhost

我需要一些帮助来刷新我的应用程序中的一个活动。我正在使用标签主机活动并连接到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();

7 个答案:

答案 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

如果您覆盖它,则可以从那里刷新您的活动。

查看更多信息herehere

答案 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);
}