我正在使用此代码进行刷新,并且此代码刷新了页面,但由于它一直在重新加载同一页面,因此我无法进入另一个页面。我希望它仅在单击并希望能够移动到其他页面时自动刷新页面。
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);
}
答案 0 :(得分:0)
您无需关闭并重新打开活动,只需使用相关数据更新用户界面。
您还可以使用LiveData
和ViewModel
,以便数据始终显示在屏幕上,而不是您手动检查是否有新数据。
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);
}