【问题标题】:Android refresh current activity [duplicate]Android刷新当前活动[重复]
【发布时间】:2011-07-01 12:30:12
【问题描述】:

我想对我的 android 应用程序进行编程以刷新其在 ButtonClick 上的当前活动。我在活动布局的顶部有一个按钮可以完成这项工作。当我点击按钮时,当前的活动应该重新加载 - 就像设备重启一样。

谢谢

【问题讨论】:

标签: android


【解决方案1】:
public void onClick (View v){
    Intent intent = getIntent();
    finish();
    startActivity(intent);
}

【讨论】:

  • 我有这段代码,但它基本上显示了我们正在从一个活动移动到另一个活动的动画。而且我以前的活动还活着。我希望一切都应该重新加载。
  • intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
  • 这很重要,谢谢@Otra
  • 我的 listView 没有用这种方法刷新。为什么?
  • Intent intent = new Intent(YourActivity.this,YourActivity.class); finish(); startActivity(intent); 最佳解决方案它将刷新所有内容。 ofc 如果你想保存一些数据,你可以在完成页面之前使用共享首选项@Otra @Shine
【解决方案2】:

你可以试试这个

finish();
startActivity(getIntent());

之前有人问过这个问题: How do I restart an Android Activity

【讨论】:

  • 我有这段代码,但它基本上显示了我们正在从一个活动移动到另一个活动的动画。而且我以前的活动还活着。我希望一切都应该重新加载。
  • 来自您自己的问题“它应该重新开始并删除以前当前活动的所有实例。”这就是@Greg 的回答所做的
  • 如果您不希望活动加载动画。找出您要刷新的内容并手动执行。
【解决方案3】:

在活动中,您可以调用recreate() 来“重新创建”活动 (API 11+)

【讨论】:

  • 像魅力一样工作,感谢您的解决方案!
  • 这个有效!它没有动画!
  • 太棒了...但是我们可以在重新创建时删除黑屏动画吗?
【解决方案4】:

这是一种刷新按钮方法,但它在我的应用程序中运行良好。在finish() 中你杀死实例

public void refresh(View view){          //refresh is onClick name given to the button
    onRestart();
}

@Override
protected void onRestart() {

    // TODO Auto-generated method stub
    super.onRestart();
    Intent i = new Intent(lala.this, lala.class);  //your class
    startActivity(i);
    finish();

}

【讨论】:

  • 这仅在您当前的意图没有来自任何先前意图的数据时才有效。
【解决方案5】:

正如here所见,这对我有用。

只需使用它或将其添加到静态类帮助程序中,然后从项目中的任何位置调用它即可。

/**
Current Activity instance will go through its lifecycle to onDestroy() and a new instance then created after it.
*/
@SuppressLint("NewApi")
  public static final void recreateActivityCompat(final Activity a) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
      a.recreate();
    } else {
      final Intent intent = a.getIntent();
      intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
      a.finish();
      a.overridePendingTransition(0, 0);
      a.startActivity(intent);
      a.overridePendingTransition(0, 0);
   }
}

【讨论】:

  • 放完这个... Activity 会不断地自行重启。
  • @AbuRuqaiyah 确保您在 onClickListener 或任何您想要的触发器中调用它。还要确保您没有从循环或每次应用启动时可能执行的函数中调用此函数——希望您了解该过程
  • 谢谢,这对我有用
【解决方案6】:

它应该重新开始并删除之前当前活动的所有实例。

不,不应该。

它应该更新它的数据(例如,requery()Cursor)。这样就不会担心“以前当前活动的实例”了。

【讨论】:

  • 你能不能再详细点...在我的活动中,一个异步线程正在后台运行。当我想重新加载此活动时,此异步线程实例不会被删除,甚至会创建两个实例,一个前一个,一个新...
  • @Vivek_Android_Developer:你是线程的分支。刷新 UI 时,不要启动第二个线程。
  • 我会检查 dat..并会告诉你..
  • @CommonsWare 但是,如果您的用户在恢复旧活动和更新光标支持的视图之间单击了一条陈旧的信息怎么办?
  • @mattblang:如果有危险,请在恢复时清除旧数据,设置ProgressBar 或其他指标,然后在可用时加载新的Cursor。
【解决方案7】:

你可以试试这个:

        CookieSyncManager.createInstance(this);         
        CookieManager cookieManager = CookieManager.getInstance();        
        cookieManager.removeAllCookie();        
        Intent intent= new Intent(YourCurrent.this, YourCurrent.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);

【讨论】:

    【解决方案8】:

    你可以使用:

    startActivity(MyClass.this, MyClass.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    

    【讨论】:

      【解决方案9】:

      您可以使用它从内部刷新 Activity。

      finish();
      startActivity(getIntent());
      

      【讨论】:

        【解决方案10】:

        最简单的方法是致电onCreate(null);,您的活动将像新的一样。

        【讨论】:

        • 这听起来相当危险。
        【解决方案11】:

        试试这个

        简单的方法

         Intent intent=new Intent(Current_Activity.this,Current_Activity.class);
            startActivity(intent);
            finish();
        

        【讨论】:

          【解决方案12】:

          我认为对你来说最好的选择是在你的布局中使用 SwipeRefreshLayout 视图。 然后设置 RefreshListener 就好了。

          mySwipeRefreshLayout.setOnRefreshListener(
                      new SwipeRefreshLayout.OnRefreshListener() {
                          @Override
                          public void onRefresh() {
                              Log.i("Fav ", "onRefresh called from SwipeRefreshLayout");
          
                              // This method performs the actual data-refresh operation.
                              // The method calls setRefreshing(false) when it's finished.
                              request();  // call what you want to update in this method
                              mySwipeRefreshLayout.setRefreshing(false);
                          }
                      }
              );
          

          更多详情click this link

          【讨论】:

            【解决方案13】:

            你可以调用这个方法:

            recreate();
            

            【讨论】:

              【解决方案14】:

              从对话框到您要刷新的活动。如果不是第一次活动!
              像这样:ma​​inActivity>>objectActivity>>对话框
              在您的对话框类中:

                @Override
              public void dismiss() {
                  super.dismiss();
                 getActivity().finish();
                  Intent i = new Intent(getActivity(), objectActivity.class);  //your class
                  startActivity(i);
              
              }
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2013-07-21
                • 1970-01-01
                • 2016-04-04
                • 2018-07-31
                • 1970-01-01
                相关资源
                最近更新 更多