Android 当我从其他活动中单击“上一步”按钮时调用onLoadFinished
我尝试使用Android 当我从其他活动中单击“上一步”按钮时调用onLoadFinished,android,android-asynctask,asynctaskloader,Android,Android Asynctask,Asynctaskloader,我尝试使用AsyncTaskLoader,但有一个问题。我从internet加载AsyncTaskLoader数据,然后在方法onLoadFinished @Override public void onLoadFinished(Loader<List<BusModelParcelable>> loader, List<BusModelParcelable> data) { hideDialog();
AsyncTaskLoader
,但有一个问题。我从internet加载AsyncTaskLoader
数据,然后在方法onLoadFinished
@Override
public void onLoadFinished(Loader<List<BusModelParcelable>> loader, List<BusModelParcelable> data) {
hideDialog();
Log.d("onLoadFinished", TestTags.TAG1);
Intent intent = new Intent(BusSearchParamActivity.this,BusModelsActivity.class);
intent.putParcelableArrayListExtra(AppVariables.BUS_MODELS_LIST, (ArrayList) data);
startActivity(intent);
}
其中busModelsCallBack是LoaderCallbacks接口的实现。当我调试时,它只在onLoadFinished上停止,而不是onCreateLoader或单击按钮。我很抱歉地告诉您,到目前为止,
AsyncTask
行为不是100%授予的。有两种方法可以克服这个问题
1) 在线程中执行操作,而不是在异步任务中执行操作。这将确保您的代码只执行一次,因为Thread
在您需要之前永远不会启动两次。如下
new Thread(new Runnable() {
@Override
public void run() {
/All your code here
}
}).start();
2) 在活动
中声明一个名为isPageLoaded
的静态
参数,初始值为false
,并在第一次加载页面后将其设置为onLoadFinished
,并在执行onLoadFinished
代码之前检查其值以下:
@Override
public void onLoadFinished(Loader<List<BusModelParcelable>> loader, List<BusModelParcelable> data) {
if(!isPageLoaded){
hideDialog();
Log.d("onLoadFinished", TestTags.TAG1);
Intent intent = new Intent(BusSearchParamActivity.this,BusModelsActivity.class);
intent.putParcelableArrayListExtra(AppVariables.BUS_MODELS_LIST, (ArrayList) data);
startActivity(intent);
isPageLoaded = true;
}
}
@覆盖
public void onLoadFinished(加载程序,列表数据){
如果(!isPageLoaded){
hideDialog();
Log.d(“onLoadFinished”,TestTags.TAG1);
意向意向=新意向(BusSearchParamActivity.this,BusModelsActivity.class);
intent.putParcelableArrayListExtra(AppVariables.BUS_MODELS_LIST,(ArrayList)数据);
星触觉(意向);
isPageLoaded=true;
}
}
试试:
private静态布尔值isClicked=false;
@凌驾
public void onLoadFinished(加载程序,列表数据){
如果(已单击)
{
hideDialog();
Log.d(“onLoadFinished”,TestTags.TAG1);
意向意向=新意向(BusSearchParamActivity.this,BusModelsActivity.class);
intent.putParcelableArrayListExtra(AppVariables.BUS_MODELS_LIST,(ArrayList)数据);
星触觉(意向);
isClicked=false;
}
}
公共无效拾取按钮单击(视图v){
isClicked=true;
getSupportLoaderManager().initLoader(LOADER_MODELS,null,busModelsCallBack);
}
onRestart()上是否调用了方法
或onResume()
?@Shayan pourvatan不,我没有,你能发布更多的代码吗?您在哪里调用onLoadFinished
?@Shayan pourvatan我已经发布了它您在BusSearchParamActivity的onCreate中调用initLoader还是restartLoader?谢谢,我使用AsyncTask loader,简单的AsyncTask没有问题。
@Override
public void onLoadFinished(Loader<List<BusModelParcelable>> loader, List<BusModelParcelable> data) {
if(!isPageLoaded){
hideDialog();
Log.d("onLoadFinished", TestTags.TAG1);
Intent intent = new Intent(BusSearchParamActivity.this,BusModelsActivity.class);
intent.putParcelableArrayListExtra(AppVariables.BUS_MODELS_LIST, (ArrayList) data);
startActivity(intent);
isPageLoaded = true;
}
}
private static boolean isClicked = false;
@Override
public void onLoadFinished(Loader<List<BusModelParcelable>> loader, List<BusModelParcelable> data) {
if(isClicked )
{
hideDialog();
Log.d("onLoadFinished", TestTags.TAG1);
Intent intent = new Intent(BusSearchParamActivity.this,BusModelsActivity.class);
intent.putParcelableArrayListExtra(AppVariables.BUS_MODELS_LIST, (ArrayList) data);
startActivity(intent);
isClicked = false;
}
}
public void pickUpButtonClick(View v) {
isClicked = true;
getSupportLoaderManager().initLoader(LOADER_MODELS,null,busModelsCallBack);
}