Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 屏幕上的活动指示器_Android_Widget_Activity Indicator - Fatal编程技术网

Android 屏幕上的活动指示器

Android 屏幕上的活动指示器,android,widget,activity-indicator,Android,Widget,Activity Indicator,在我的应用程序中,我想显示一个活动指示器。在我的应用程序中,我有一个galleryview,如果用户单击galleryview中的项目,我将从URL加载数据并在listview中显示。在加载和显示数据之间,我需要一个指示器 我的活动代码: gal.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> par

在我的应用程序中,我想显示一个活动指示器。在我的应用程序中,我有一个galleryview,如果用户单击galleryview中的项目,我将从URL加载数据并在listview中显示。在加载和显示数据之间,我需要一个指示器

我的活动代码:

gal.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View v, int position,
                long id) {
            // TODO Auto-generated method stub  

            context.getInstance().setAppVariable("sectionurl", adapter.sectionurl[position]);
            ListView list=(ListView)findViewById(R.id.list);
            listadapter = new ListViewwithimageAdapter(this);
            list.setAdapter(listadapter);

        }
    }); 
我的getview代码:

public View getView(int position, View convertView, ViewGroup parent) 
    {

         ProgressDialog mDialog = new ProgressDialog(contxt);
         mDialog.setMessage("Please wait...");
         mDialog.setCancelable(false);
         mDialog.show();
        // TODO Auto-generated method stub      
         Bitmap bitmap = DownloadImage(
                 kickerimage[position] );        
//       View listView = convertView;
         if (convertView   == null) 
            {
                //this should only ever run if you do not get a view back            
             LayoutInflater  inflater = (LayoutInflater) contxt
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
             convertView  = inflater.inflate(R.layout.homelistrow, null); 
            }
//       else
//       {
//           holder.removeAllViews();
//       }
//      View listView;
//      if (convertView == null) 
//      {
//          listView = new View(contxt);             
//          LinearLayout holder = (LinearLayout)convertView.findViewById(android.R.id);
////            holder = inflater.inflate(R.layout.homelistrow, null); 
//          System.out.println("pos="+position);
//          System.out.println("item="+getItem(position));
//       else
//       {
            TextView textView = (TextView) convertView
                    .findViewById(R.id.name_label);
            textView.setText(itemsarray[position]);

            ImageView imageView = (ImageView) convertView
                    .findViewById(R.id.icon);
            imageView.setImageBitmap(bitmap);
//      }
//      else        
//      {
//          listView = (View) convertView;
//      } 
//       }
            mDialog.dismiss();
        return convertView ;        
    }
我的日志:

11-28 16:01:55.589: D/AndroidRuntime(788): Shutting down VM
11-28 16:01:55.589: W/dalvikvm(788): threadid=3: thread exiting with uncaught exception (group=0x4001b188)
11-28 16:01:55.589: E/AndroidRuntime(788): Uncaught handler: thread main exiting due to uncaught exception
11-28 16:01:55.650: E/AndroidRuntime(788): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
11-28 16:01:55.650: E/AndroidRuntime(788):  at android.view.ViewRoot.setView(ViewRoot.java:472)
11-28 16:01:55.650: E/AndroidRuntime(788):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)
11-28 16:01:55.650: E/AndroidRuntime(788):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
11-28 16:01:55.650: E/AndroidRuntime(788):  at android.app.Dialog.show(Dialog.java:239)
11-28 16:01:55.650: E/AndroidRuntime(788):  at com.newspaper.NewsPaperNov28MainGalleryActivity$1.onItemClick(NewsPaperNov28MainGalleryActivity.java:68)
11-28 16:01:55.650: E/AndroidRuntime(788):  at android.widget.AdapterView.performItemClick(AdapterView.java:284)
11-28 16:01:55.650: E/AndroidRuntime(788):  at android.widget.Gallery.onSingleTapUp(Gallery.java:864)
11-28 16:01:55.650: E/AndroidRuntime(788):  at android.view.GestureDetector.onTouchEvent(GestureDetector.java:506)
11-28 16:01:55.650: E/AndroidRuntime(788):  at android.widget.Gallery.onTouchEvent(Gallery.java:839)
11-28 16:01:55.650: E/AndroidRuntime(788):  at android.view.View.dispatchTouchEvent(View.java:3709)
11-28 16:01:55.650: E/AndroidRuntime(788):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:852)
11-28 16:01:55.650: E/AndroidRuntime(788):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
11-28 16:01:55.650: E/AndroidRuntime(788):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
11-28 16:01:55.650: E/AndroidRuntime(788):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
11-28 16:01:55.650: E/AndroidRuntime(788):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
11-28 16:01:55.650: E/AndroidRuntime(788):  at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1659)
11-28 16:01:55.650: E/AndroidRuntime(788):  at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107)
11-28 16:01:55.650: E/AndroidRuntime(788):  at android.app.Activity.dispatchTouchEvent(Activity.java:2061)
11-28 16:01:55.650: E/AndroidRuntime(788):  at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1643)
11-28 16:01:55.650: E/AndroidRuntime(788):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1691)
11-28 16:01:55.650: E/AndroidRuntime(788):  at android.os.Handler.dispatchMessage(Handler.java:99)
11-28 16:01:55.650: E/AndroidRuntime(788):  at android.os.Looper.loop(Looper.java:123)
11-28 16:01:55.650: E/AndroidRuntime(788):  at android.app.ActivityThread.main(ActivityThread.java:4363)
11-28 16:01:55.650: E/AndroidRuntime(788):  at java.lang.reflect.Method.invokeNative(Native Method)
11-28 16:01:55.650: E/AndroidRuntime(788):  at java.lang.reflect.Method.invoke(Method.java:521)
11-28 16:01:55.650: E/AndroidRuntime(788):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
11-28 16:01:55.650: E/AndroidRuntime(788):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
11-28 16:01:55.650: E/AndroidRuntime(788):  at dalvik.system.NativeStart.main(Native Method)
11-28 16:01:55.739: I/dalvikvm(788): threadid=7: reacting to signal 3
11-28 16:01:55.739: I/dalvikvm(788): Wrote stack trace to '/data/anr/traces.txt'
实际上我把这段代码放在adapter类的getview()中。但是指示器并没有结束它一直显示的状态。请帮助我。提前谢谢。

您需要调用

mDialog.dismiss();
装载完成后

编辑:

我正在添加用于类似任务的代码

//This is my AsyncTask which needed some time
new InsertDbTask().execute();


//Actual task
public class InsertDbTask extends AsyncTask<Void, Void, Void> {
        private final ProgressDialog dialog = new ProgressDialog(mContext);

        @Override
        protected Void doInBackground(Void... params) {
            // TODO Auto-generated method stub
            try {
                prepareInsert();
            } catch (Exception e) {
                // Log.e("Error: ", e.getMessage());
            }
            return null;
        }

        @Override
        protected void onPreExecute() {
            // TODO Auto-generated method stub
            super.onPreExecute();
            this.dialog.setCanceledOnTouchOutside(false);
            this.dialog.setMessage("Inserting Record In Local DB Please Wait.");
            this.dialog.show();
        }

        @Override
        protected void onPostExecute(Void result) {
            // TODO Auto-generated method stub
            super.onPostExecute(result);

            if (this.dialog.isShowing()) {
                this.dialog.dismiss();
            }
            saveButton.setEnabled(true);    // enable save button after execution of prepareInsert().

        }

    }

public void prepareInsert()
{
      // Do something 
}
//这是我的异步任务,需要一些时间
新建InsertDbTask().execute();
//实际任务
公共类InsertDbTask扩展了AsyncTask{
private final ProgressDialog=新建ProgressDialog(mContext);
@凌驾
受保护的Void doInBackground(Void…参数){
//TODO自动生成的方法存根
试一试{
准备插入();
}捕获(例外e){
//Log.e(“错误:,e.getMessage());
}
返回null;
}
@凌驾
受保护的void onPreExecute(){
//TODO自动生成的方法存根
super.onPreExecute();
this.dialog.setCanceledOnTouchOutside(false);
this.dialog.setMessage(“在本地数据库中插入记录,请稍候”);
this.dialog.show();
}
@凌驾
受保护的void onPostExecute(void结果){
//TODO自动生成的方法存根
super.onPostExecute(结果);
if(this.dialog.isShowing()){
this.dialog.disclose();
}
saveButton.setEnabled(true);//在执行prepareInsert()后启用保存按钮。
}
}
公共无效准备插入()
{
//做点什么
}
您需要打电话

mDialog.dismiss();
装载完成后

编辑:

我正在添加用于类似任务的代码

//This is my AsyncTask which needed some time
new InsertDbTask().execute();


//Actual task
public class InsertDbTask extends AsyncTask<Void, Void, Void> {
        private final ProgressDialog dialog = new ProgressDialog(mContext);

        @Override
        protected Void doInBackground(Void... params) {
            // TODO Auto-generated method stub
            try {
                prepareInsert();
            } catch (Exception e) {
                // Log.e("Error: ", e.getMessage());
            }
            return null;
        }

        @Override
        protected void onPreExecute() {
            // TODO Auto-generated method stub
            super.onPreExecute();
            this.dialog.setCanceledOnTouchOutside(false);
            this.dialog.setMessage("Inserting Record In Local DB Please Wait.");
            this.dialog.show();
        }

        @Override
        protected void onPostExecute(Void result) {
            // TODO Auto-generated method stub
            super.onPostExecute(result);

            if (this.dialog.isShowing()) {
                this.dialog.dismiss();
            }
            saveButton.setEnabled(true);    // enable save button after execution of prepareInsert().

        }

    }

public void prepareInsert()
{
      // Do something 
}
//这是我的异步任务,需要一些时间
新建InsertDbTask().execute();
//实际任务
公共类InsertDbTask扩展了AsyncTask{
private final ProgressDialog=新建ProgressDialog(mContext);
@凌驾
受保护的Void doInBackground(Void…参数){
//TODO自动生成的方法存根
试一试{
准备插入();
}捕获(例外e){
//Log.e(“错误:,e.getMessage());
}
返回null;
}
@凌驾
受保护的void onPreExecute(){
//TODO自动生成的方法存根
super.onPreExecute();
this.dialog.setCanceledOnTouchOutside(false);
this.dialog.setMessage(“在本地数据库中插入记录,请稍候”);
this.dialog.show();
}
@凌驾
受保护的void onPostExecute(void结果){
//TODO自动生成的方法存根
super.onPostExecute(结果);
if(this.dialog.isShowing()){
this.dialog.disclose();
}
saveButton.setEnabled(true);//在执行prepareInsert()后启用保存按钮。
}
}
公共无效准备插入()
{
//做点什么
}

加载列表时,您需要将进度对话框代码放入
gal.setonimclickListener
&关闭该进度对话框。

加载列表时,您需要将进度对话框代码放入
gal.setonimclickListener
&关闭该进度对话框。

出现了什么问题?正在显示对话框?请同时发布getView()方法的代码。因为我觉得有点不对劲,谢谢user1858914..您执行了操作,所以有preExecute()和PostExecute().但是在我的情况下,我应该在哪里分离此功能..您可以在“return convertView”语句之前调用dialog.dismise()。问题出在哪里?正在显示对话框?请同时发布getView()方法的代码。因为我认为这有点不对劲,谢谢user1858914..您执行了操作,所以有preExecute()和PostExecute().但是在我的情况下,我应该在哪里分离此功能..您可以在“return convertView”语句之前调用dialog.dismise()。不要在getview()类中添加。getview调用了eachtime以创建布局行。因此,您需要在获取数据之前放置asynctask代码。在gal.setOnItemClickListener中,单击其post execute Disease dialog&update UI适配器上的mentod start asynctask with progressdialog:放置此
ListView list=(ListView)findViewById(R.id.list);listadapter=新的ListViewwithimageAdapter(此);list.setAdapter(listadapter)获取数据后在postexecute中让我们再次复制粘贴:在gal.setOnItemClickListener中,在其post execute Disease对话框和更新UI适配器上单击mentod start AsyncTask with progressdialog:放置此ListView列表=(ListView)findViewById(R.id.list);listadapter=新的ListViewwithimageAdapter(此);list.setAdapter(listadapter);在获取数据后的postexecute中,不要在getview()类中添加。getview调用了eachtime以创建布局行。因此,您需要在获取数据之前放置asynctask代码。在gal.setOnItemClickListener中,单击其post execute Disease dialog&update UI适配器上的mentod start asynctask with progressdialog:放置此
ListView list=(ListView)findViewById(R.id.list);listadapter=新的ListViewwithimageAdapter(此);list.setAdapter(listadapter)获取数据后在postexecute中让我们再次复制粘贴:在gal.setOnItemClickListener中,在其post execute Disease对话框和更新UI适配器上单击mentod start AsyncTask with progressdialog:放置此ListView列表=(ListView)findViewById(R.id.list);listadapter=新的ListViewwithimageAdapter(此);list.setAdapter(listadapter);在POST中,在获取数据后执行