0

我的应用程序面临一个问题。实际上,有一个活动,我将图像发送到服务器。在 xml 布局文件中,我使用进度条视图。当图像加载到服务器时,进度条开始加载,当图像加载到服务器时关闭工作完成。一切正常。问题是当进度条处于运行状态时,后台活动仍然处于活动状态。我想在进度条处于运行状态时冻结后台活动。代码如下。

postPic.setOnClickListener(new View.OnClickListener() {

        @Override 
        public void onClick(View v){


        mProgressBar.setVisibility(View.VISIBLE);


                new Thread(){

                @Override
                public void run() {


                //here the code to post image to server 

                    handler.sendEmptyMessage(0);


                }


            }.start();
            }

        }

        private  Handler handler = new Handler() {
             @Override
             public void handleMessage(Message msg) {
                 try {


                     mProgressBar.setVisibility(View.GONE);


                        }

                      else  if(messagePostingItems.equalsIgnoreCase("Success")){

                        startActivity(new Intent(PostPhoto.this,PostPicDialog.class));

                     }
            };
    });

请帮我解决这个问题。

4

4 回答 4

0

最后我做到了。那些面临同样问题的人,我的解决方案一定会帮助他们。只需在您的活动类中创建 Dialog 类的对象。

Dialog mdialog=new Dialog(this);

    mdialog.requestWindowFeature(Window.FEATURE_NO_TITLE);

    mdialog.setContentView(R.layout.custom_progress_dialog);
    mdialog.getWindow ().setBackgroundDrawableResource (android.R.color.transparent);


    mdialog.show();

custom_progress_dialog 如下:-

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent">


<ProgressBar
    android:id="@+id/pbCustomDialog"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:visibility="visible" />

</LinearLayout>
于 2012-12-19T12:54:31.663 回答
0

如果您想在做其他事情的同时“冻结”活动,则适当的模式是使用 AlertDialog。将进度条放在对话框上,每当操作完成时,关闭对话框。

但请记住,用户可以随时单击主页按钮,这会让您更加头疼。

于 2012-12-19T12:02:05.177 回答
-1

你不能。

“冻结后台活动”是 UI 线程,如果您尝试停止 UI 线程,您将导致 ANR(Activity Not Responding)并且用户可以选择强制关闭您的应用程序。

但是,如果您想停止您所说的“仍在移动”,那么您应该在 onClick 方法中执行此操作,同时显示对话框并关闭它。一个简单的解决方案是启动一个包含进度对话框和白色背景的新 Activity。然后活动生命周期为您完成大部分工作。

或者将您的 ProgressBar 放在一个对话框中,即ProgressDialog并将其显示给用户。这称为模态对话框。

于 2012-12-19T12:02:23.870 回答
-1

使用 AsyncTask..... 例如......

private class abc extends AsyncTask<Void, Void, String> {

    @Override
    protected void onPreExecute() {
        // TODO Auto-generated method stub
        super.onPreExecute();
                    //start the progress dialog
    }

    protected void onPostExecute(String s) {
        //dismiss the dialog
    }

    @Override
    protected String doInBackground(Void... params) {
        // TODO Auto-generated method stub
        //send image to server code
        return null;
    }
}

然后在你的 onCreate() 方法调用中

new abc().execute();
于 2012-12-19T12:08:23.893 回答