3

我按照我认为可行的方式做这件事并没有太大的成功,所以我会问专家。

我有一个包含十个链接到图像的 URL 的 ArrayList。我想显示第一个 URL 2 秒,然后获取第二个 URL 并执行相同操作直到结束。

这是我到目前为止所拥有的,我想也许我不会以最好的方式通过 postExecute 中的对话框来处理它?:

 private class LiveView extends AsyncTask<String, Integer, ArrayList<String>> {
        ProgressDialog dialog;
        private volatile boolean running = true;

        @Override
        protected void onPreExecute() {
             dialog = ProgressDialog.show(
                        myView.this,
                        "Working",
                        "Info message . . .",
                        true,
                        true,
                        new DialogInterface.OnCancelListener(){

                            public void onCancel(DialogInterface dialog) {
                                cancel(true);                           
                            }
                        }
                );
            }

        @Override
        protected void onCancelled() {
              running = false;
        }

        @Override
        protected ArrayList<String> doInBackground(String... passed) {



            while (running) {

            //removed the code here that sends the request to to make this shorter the server but it works fine
            return responseFromServer.arrayListofURLs;           //list or URLs 

            }
            return null;
        }

        @Override
        protected void onPostExecute(ArrayList<String> listURLs) {      
            dialog.cancel();

            Dialog liveView = new Dialog(myView.this, R.style.Dialog);
            liveView.setContentView(R.layout.liveview_dialogue);
            TextView title = (TextView)liveView.findViewById(R.id.liveViewTitle);           
            Button button = (Button) liveView.findViewById(R.id.liveViewButton);
            ImageView trackImage = (ImageView)liveView.findViewById(R.id.liveViewImage);

            //I want to loop through the ten images here? 

            button.setOnClickListener(new OnClickListener() {

                public void onClick(View v) {

                }
            });
            liveView.show();



        }

    }
4

2 回答 2

1

创建一个处理程序,并通过 postDelayed 向它发送一条延迟 2 秒的消息。每当您收到消息时,通过调用 trackImage.setImage 显示下一张图片。当他们最终关闭对话框时,从处理程序中删除所有待处理的消息。

于 2013-03-18T19:40:22.080 回答
0

为了用一些代码完成答案,这是我用处理程序完成的。我不需要传递任何变量,因为我为 AsyncTask 全局创建了位图 ListArray。如果对话框关闭,我还使用布尔值来结束处理程序。

        liveView = new Dialog(myView.this, R.style.Dialog);
        liveView.setContentView(R.layout.liveview_dialogue);
        TextView title = (TextView)liveView.findViewById(R.id.liveViewTitle);           
        Button button = (Button) liveView.findViewById(R.id.liveViewButton);
        trackImage = (ImageView)liveView.findViewById(R.id.liveViewImage);





        button.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                run = false;
                liveView.dismiss();
            }
        });
        liveView.show();

        final Handler handler = new Handler(); 
        final Runnable r = new Runnable()
        {
            Iterator<Bitmap> it = images.iterator();
            public void run() 
            {   
                if(run){
                trackImage.setImageBitmap(it.next());
                if(it.hasNext())
                handler.postDelayed(this, 5000);
                }
            }
        };
        handler.postDelayed(r, 5000);
于 2013-03-19T06:21:31.963 回答