Java 我是否可以限制ViewFlipper在执行异步任务之前进行翻转?
我的应用程序有一个Java 我是否可以限制ViewFlipper在执行异步任务之前进行翻转?,java,android,Java,Android,我的应用程序有一个ViewFlipper,其中包含3个视图组。每个ViewGroup交互都依赖于数据库中的数据。我使用AsyncTask从数据库中读取数据,并在完成后返回一个游标。在执行AsyncTask之前,我只想在ViewFlipper中显示一个视图,上面写着“正在加载数据,请稍候”。这有可能吗?是的,您可以使用progressDialog。这样做, progressDiaolg=ProgressDialog.show(Activity.this,"","Loading Images..."
ViewFlipper
,其中包含3个视图组
。每个ViewGroup交互
都依赖于数据库中的数据。我使用AsyncTask从数据库中读取数据,并在完成后返回一个游标。在执行AsyncTask之前,我只想在ViewFlipper
中显示一个视图,上面写着“正在加载数据,请稍候”。这有可能吗?是的,您可以使用progressDialog。这样做,
progressDiaolg=ProgressDialog.show(Activity.this,"","Loading Images...");
final Thread t= new Thread(new Runnable() {
public void run() {
Log.i("Inside Thread", "Downloading Images...");
downloadImages();
handler.sendEmptyMessage(0);
}
});
t.start();
handler = new Handler() {
@Override
public void handleMessage(Message msg) {
try {
progressDiaolg.dismiss();
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
}
};
private class MyAsyncTask extends AsyncTask<Integer, Integer, Integer[]> {
private ProgressDialog myWait = null;
// This is on the UI thread itself
protected void onPreExecute() {
myWait = new ProgressDialog(MainActivity.this);
myWait.setMessage("Loading data, please wait");
myWait.setCancelable(false);
myWait.show();
}
// Separate worker thread is used here
protected Integer[] doInBackground(Integer...params) {
//do the database loading
return <your result - goes to onPostExecute>;
}
// This is on the UI thread itself
protected void onPostExecute(Integer[] resultCell) {
if (myWait != null) {
myWait.dismiss();
}
}
}
我不知道该怎么做。因此,请尝试相应地修改此代码段 是的,您可以使用progressDialog。这样做,
progressDiaolg=ProgressDialog.show(Activity.this,"","Loading Images...");
final Thread t= new Thread(new Runnable() {
public void run() {
Log.i("Inside Thread", "Downloading Images...");
downloadImages();
handler.sendEmptyMessage(0);
}
});
t.start();
handler = new Handler() {
@Override
public void handleMessage(Message msg) {
try {
progressDiaolg.dismiss();
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
}
};
private class MyAsyncTask extends AsyncTask<Integer, Integer, Integer[]> {
private ProgressDialog myWait = null;
// This is on the UI thread itself
protected void onPreExecute() {
myWait = new ProgressDialog(MainActivity.this);
myWait.setMessage("Loading data, please wait");
myWait.setCancelable(false);
myWait.show();
}
// Separate worker thread is used here
protected Integer[] doInBackground(Integer...params) {
//do the database loading
return <your result - goes to onPostExecute>;
}
// This is on the UI thread itself
protected void onPostExecute(Integer[] resultCell) {
if (myWait != null) {
myWait.dismiss();
}
}
}
我不知道该怎么做。因此,请尝试相应地修改此代码段 在您的
onPreExecute()
中显示进度对话框,并在onPostExecute()
中关闭它。像这样的,
progressDiaolg=ProgressDialog.show(Activity.this,"","Loading Images...");
final Thread t= new Thread(new Runnable() {
public void run() {
Log.i("Inside Thread", "Downloading Images...");
downloadImages();
handler.sendEmptyMessage(0);
}
});
t.start();
handler = new Handler() {
@Override
public void handleMessage(Message msg) {
try {
progressDiaolg.dismiss();
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
}
};
private class MyAsyncTask extends AsyncTask<Integer, Integer, Integer[]> {
private ProgressDialog myWait = null;
// This is on the UI thread itself
protected void onPreExecute() {
myWait = new ProgressDialog(MainActivity.this);
myWait.setMessage("Loading data, please wait");
myWait.setCancelable(false);
myWait.show();
}
// Separate worker thread is used here
protected Integer[] doInBackground(Integer...params) {
//do the database loading
return <your result - goes to onPostExecute>;
}
// This is on the UI thread itself
protected void onPostExecute(Integer[] resultCell) {
if (myWait != null) {
myWait.dismiss();
}
}
}
私有类MyAsyncTask扩展了AsyncTask{
private ProgressDialog myWait=null;
//这在UI线程本身上
受保护的void onPreExecute(){
myWait=新建ProgressDialog(MainActivity.this);
setMessage(“正在加载数据,请稍候”);
myWait.setCancelable(false);
myWait.show();
}
//这里使用单独的工作线程
受保护的整数[]doInBackground(整数…参数){
//进行数据库加载
返回;
}
//这在UI线程本身上
受保护的void onPostExecute(整数[]resultCell){
if(myWait!=null){
myWait.discouse();
}
}
}
在onPreExecute()
中显示进度对话框,并在onPostExecute()
中关闭它。像这样的,
progressDiaolg=ProgressDialog.show(Activity.this,"","Loading Images...");
final Thread t= new Thread(new Runnable() {
public void run() {
Log.i("Inside Thread", "Downloading Images...");
downloadImages();
handler.sendEmptyMessage(0);
}
});
t.start();
handler = new Handler() {
@Override
public void handleMessage(Message msg) {
try {
progressDiaolg.dismiss();
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
}
};
private class MyAsyncTask extends AsyncTask<Integer, Integer, Integer[]> {
private ProgressDialog myWait = null;
// This is on the UI thread itself
protected void onPreExecute() {
myWait = new ProgressDialog(MainActivity.this);
myWait.setMessage("Loading data, please wait");
myWait.setCancelable(false);
myWait.show();
}
// Separate worker thread is used here
protected Integer[] doInBackground(Integer...params) {
//do the database loading
return <your result - goes to onPostExecute>;
}
// This is on the UI thread itself
protected void onPostExecute(Integer[] resultCell) {
if (myWait != null) {
myWait.dismiss();
}
}
}
私有类MyAsyncTask扩展了AsyncTask{
private ProgressDialog myWait=null;
//这在UI线程本身上
受保护的void onPreExecute(){
myWait=新建ProgressDialog(MainActivity.this);
setMessage(“正在加载数据,请稍候”);
myWait.setCancelable(false);
myWait.show();
}
//这里使用单独的工作线程
受保护的整数[]doInBackground(整数…参数){
//进行数据库加载
返回;
}
//这在UI线程本身上
受保护的void onPostExecute(整数[]resultCell){
if(myWait!=null){
myWait.discouse();
}
}
}
progressDialog是否会限制与UI的所有交互,直到处理程序将其取消?如果您想确保某个线程与应用程序的其余部分一起退出,无论发生什么情况,一个好的方法是在创建之后和启动线程之前调用thread.setDaemon(true)
。然而。source.rar为您的问题提供了更好的答案,因为他特别使用了您指定的AsyncTask
。是的。ProgressDialog可用于停止交互,直到任务完成,否则您可以覆盖ProgressDialog的setCancelable(),以实现所需。ProgressDialog是否会限制与UI的所有交互,直到处理程序将其取消?如果您想确保某个线程与应用程序的其余部分一起退出,无论发生什么情况,一种很好的方法是在创建之后和启动线程之前调用Thread.setDaemon(true)
。然而。source.rar为您的问题提供了更好的答案,因为他特别使用了您指定的AsyncTask
。是的。ProgressDialog可用于停止交互,直到任务完成,否则您可以覆盖ProgressDialog的setCancelable(),以实现您想要的效果。如果我将所有ViewFlipper视图组移动到不同的布局xml中,然后在PostExecute上将其充气到ViewFlipper中,怎么样,或者这是一个坏主意?一旦取消“进度”对话框,您将返回以前显示的视图。不太明白如果它们显示正常,为什么还要再次充气(充气也是一项昂贵的操作)?如果我将所有ViewFlipper视图组移动到不同的布局xml中,然后在PostExecute时将其充气到ViewFlipper中,或者这是一个坏主意?一旦取消“进度”对话框,您将返回以前显示的视图。不太明白为什么你会想再次充气,如果他们出现好(也充气是一个昂贵的操作)?