我有一个基类和子类结构的Android项目。因此,基本类中的大多数方法基本上都可以被子活动使用。
现在我创建了一个自定义加载类型popupwindow whoes方法体在基类中,以便所有子活动都可以使用相同的。
现在,当我在onCreate阶段的任何子活动中执行一些initloader调用时,问题会产生,它曾用于提示异常,即活动已启动。
我用Google搜索了一下,发现了这个程序:
new Handler().post(new Runnable() {
@Override
public void run() {
cDialog.show();
}
});
我工作了,弹出窗口显示..但是,
稍后当onloadfinishsed发生时,我再次关闭弹出窗口。
public void hideCustomDialog() {
runOnUiThread(new Runnable() {
@Override
public void run() {
if (cDialog != null && cDialog.isShowing())
cDialog.dismiss();
}
});
}
它工作正常,但现在问题在我调用loader来获取一些数据并且它的结束很快就说了。在那一刻发生的事情是,自从cDialog.show()以来,隐藏加载器被调用了。仍在等待处理程序发布队列。
结果我看到了无限的对话。
有关创意的任何工作吗?
答案 0 :(得分:0)
您可以创建一个标志,以便在运行size_t startpos = num.find_first_not_of(" ");
size_t endpos = num.find_last_not_of(" ");
num = num.substr(startpos, endpos-startpos+1);
UINT64 input; //= std::strtoull(num.cstr(), NULL, 0);
std::istringstream stream (num);
stream >> input;
之前了解对话框是否已运行hideCustomDialog()
。例如:
在运行加载程序之前将标志初始化为false:
cDialog.show();
检查是否已完成获取数据:
boolean wasDialogClosed = false;
如果在显示之前尝试关闭对话框,请将flag设置为true:
new Handler().post(new Runnable() {
@Override
public void run() {
if(!wasDialogClosed){
cDialog.show();
}
}
});
编辑1
这不是一个完美的场景,尽管你可以尝试延迟进程以关闭对话框,以防万一尚未创建:
public void hideCustomDialog() {
runOnUiThread(new Runnable() {
@Override
public void run() {
if (cDialog != null && cDialog.isShowing()){
cDialog.dismiss();
}
else{
wasDialogClosed = true;
}
}
});
}
答案 1 :(得分:-1)
您可以使用AsyncTask执行类似的工作。 只需在onPreExecute中加载对话框并在onPostExecute中将其关闭。
private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
protected Long doInBackground(URL... urls) {
//Your Code
}
protected void onPreExecute() {
cDialog.show();
}
protected void onPostExecute(Long result) {
if (cDialog != null && cDialog.isShowing()){
cDialog.dismiss();
}
}