如何刷新页面而不完成?

时间:2019-01-28 09:26:48

标签: android

我正在使用此代码进行刷新,并且此代码刷新了页面,但由于它一直在重新加载同一页面,因此我无法进入另一个页面。我希望它仅在单击并希望能够移动到其他页面时自动刷新页面。

enter code here
 public void refresh(int milliseconds){
    final Handler handler = new Handler();
    final Runnable runnable = new Runnable() {
        @Override
        public void run() {
            finish();
            overridePendingTransition( 0, 0);
            startActivity(getIntent());
            overridePendingTransition( 0, 0);
        }
    };
    handler.postDelayed(runnable,milliseconds);
}

4 个答案:

答案 0 :(得分:0)

您无需关闭并重新打开活动,只需使用相关数据更新用户界面。

您还可以使用LiveDataViewModel,以便数据始终显示在屏幕上,而不是您手动检查是否有新数据。

LiveData

https://developer.android.com/topic/libraries/architecture/livedata

  

LiveData是可观察的数据持有者类。不像普通的   可以观察到,LiveData具有生命周期意识,这意味着它尊重   其他应用程序组件的生命周期,例如活动,片段或   服务。这种意识确保LiveData仅更新应用程序组件   处于活动生命周期状态的观察者。

答案 1 :(得分:0)

@Daniel的答案非常合理,但是,如果您仍然想重新加载页面以了解其目的,则可以在不启动新线程的情况下以多种方式进行操作!

实现SwipeToRefreshLayout,胜过启动新线程 然后

mySwipeRefreshLayout.setOnRefreshListener(
    new SwipeRefreshLayout.OnRefreshListener() {
        @Override
        public void onRefresh() {
            doYourUpdate();
            //Or Just call
            finish();
            startActivity(getIntent());

        }
    }
);

或者如果您正在使用按钮,只需致电

finish();
startActivity(getIntent());

您可以在不使用startActivity(getIntent());的情况下实现finish();,但是请小心向堆栈中添加无用的活动。

答案 2 :(得分:0)

当您要刷新数据时,请使用Daniel B.所说的LiveData。 您当前正在使用finish()销毁该活动,并尝试再次启动同一活动。 finish()方法在活动生命周期中启动onDestroy()方法。因此,最后调用此方法。 您的方式不是刷新活动数据的方法。

但是,如果您想在单击按钮后重新启动活动,请参见以下代码:

void restartActivity(View view){
    Intent i = new Intent(this, ActivityClassWhichYouWantToStart.class);
    startActivity(i);
    finish();
}

答案 3 :(得分:0)

public void refresh(int milliseconds){
    final Handler handler = new Handler();
    final Runnable runnable = new Runnable() {
        @Override
        public void run() {
            recreate();
        }
    };
    handler.postDelayed(runnable,milliseconds);
}