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中,或者这是一个坏主意?一旦取消“进度”对话框,您将返回以前显示的视图。不太明白为什么你会想再次充气,如果他们出现好(也充气是一个昂贵的操作)?