【问题标题】:Android Refresh activity when returns to it返回时的Android刷新活动
【发布时间】:2012-01-04 16:06:11
【问题描述】:

我需要一些帮助来刷新我的应用程序中的一项活动。我正在使用选项卡主机活动并连接到网络服务并从我的一项子活动中下载一些数据。当我在我的子活动中按下同步按钮时,我正在启动一个不在选项卡主机中的新活动,并且当同步完成时,它返回到它的父项(子活动)。我想要实现的是在我返回活动时刷新活动。当我通过互联网检查时,我发现最好的选择是使用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();
 }
}

同步类:

Intent intent = new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
setResult(RESULT_OK,intent);
finish();

【问题讨论】:

  • 你是什么意思:'它甚至没有显示登录'?
  • 我的意思是这个日志:Log.e("","OnActivityResult");
  • 在if条件之前尝试移动它
  • 你可以试试改成like: setResult(1);结束();在同步中,所以不要发送意图
  • 同样的结果,不显示onActivityResult()

标签: android android-activity refresh android-tabhost


【解决方案1】:

如果你用startActivityForResult方法启动你的第二个activity,当你返回第一个activity时,第一个activity的onActivityResult会被调用。

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

查看更多信息herehere

【讨论】:

    【解决方案2】:

    您应该在方法的父活动中处理以“startActivityForResult”开始的活动结果:

    @override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
       //...
    }
    

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

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

    【讨论】:

    • 只需用我正在使用的代码更新我的答案,但它甚至没有在我的onActivityresult 中显示日志。
    【解决方案3】:

    使用带有请求代码的 startActivityForResult 调用子活动,从子活动中设置结果。当子活动完成后,您可以在 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

    【讨论】:

      【解决方案4】:

      按下按钮时:

      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();
      

      【讨论】:

      • 这是一个非常完整的答案
      • 问题:为什么不在onActivityResult方法中使用recreate();
      【解决方案5】:

      另一种棘手的方法是在 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 管理器时它的完成方式。)

      【讨论】:

        【解决方案6】:

        在要刷新的活动中覆盖onRestart() 方法,然后重新创建活动

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

        【讨论】:

          【解决方案7】:

          覆盖

          onRestart()

          方法,以便在您从所需任务返回时自动调用它。

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

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

          【讨论】:

            猜你喜欢
            • 2013-02-25
            • 1970-01-01
            • 1970-01-01
            • 2018-02-17
            • 1970-01-01
            • 2018-03-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多