窗口管理$ BadTokenException [英] WindowManager$BadTokenException

查看:101
本文介绍了窗口管理$ BadTokenException的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图把进度对话框中的code> ListView控件的Click事件中提到的code以下,但我得到的错误窗口管理器$ BadTokenException:??无法添加窗口 - 令牌android.app.LocalActivityManager$LocalActivityRecord@44eddc70是无效的,是你的活动运行你可以给我这个任何解决方案

code

 最终的ListView LV1 =(ListView控件)findViewById(R.id.list);
    lv1.setAdapter(新EfficientAdapter(本));

    lv1.setTextFilterEnabled(真正的);

    lv1.setOnItemClickListener(新OnItemClickListener(){
        公共无效onItemClick(适配器视图<>一种,视图V,
                最终诠释的位置,长的id){
            最后ProgressDialog PD = ProgressDialog.show(Add_Entry.this,
                    , 请稍候....);
            新的Thread(){
                公共无效的run(){

                    如果(lv1.getItemAtPosition(位置).equals(0)){

                        编辑意图=新的意图(getApplicationContext()
                                SourceOfStress.class);
                        TabGroupActivity parentActivity =(TabGroupActivity)的getParent();
                        edit.putExtra(currActi,的AddEntry);
                        parentActivity.startChildActivity(SorceOfStress
                                编辑);

                    }
                    如果(lv1.getItemAtPosition(位置).equals(1)){
                        编辑意图=新的意图(的getParent()
                                SourceOFSymptoms.class);
                        TabGroupActivity parentActivity =(TabGroupActivity)的getParent();
                        edit.putExtra(currActi,的AddEntry);
                        parentActivity.startChildActivity(
                                SourceOFSymptoms,编辑)
                    }
                    如果(lv1.getItemAtPosition(位置).equals(2)){
                        编辑意图=新的意图(的getParent()
                                Stress_Resilliance.class);
                        TabGroupActivity parentActivity =(TabGroupActivity)的getParent();
                        edit.putExtra(currActi,的AddEntry);
                        parentActivity.startChildActivity(
                                Stress_Resilliance,编辑)
                    }
                    pd.dismiss();
                }
            }。开始();
        }

    });
 

我的文件名是Add_Entry.java 和错误出现的行

  ProgressDialog.show(Add_Entry.this,
                    , 请稍候....);
 

解决方案

您正试图更新从一个线程的用户界面。你不能做到这一点。

使用处理程序机制更新UI组件。

code取自网站:这里的处理程序类用于更新后台线程进度图。

 包de.vogella.android.handler;

进口android.app.Activity;
进口android.os.Bundle;
进口android.os.Handler;
进口android.view.View;
进口android.widget.ProgressBar;
进口android.widget.TextView;

公共类ProgressTestActivity延伸活动{
  私人处理程序处理程序;
  私人进度进展情况;
  私人TextView的文字;


/ **第一次创建活动时调用。 * /

  @覆盖
  公共无效的onCreate(包savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.main);
    进度=(进度)findViewById(R.id.progressBar1);
    文=(TextView的)findViewById(R.id.textView1);

  }

  公共无效startProgress(查看视图){
    //做一些长
    可运行可运行=新的Runnable(){
      @覆盖
      公共无效的run(){
        的for(int i = 0; I< = 10;我++){
          最终int值=我;
          尝试 {
            视频下载(2000);
          }赶上(InterruptedException异常E){
            e.printStackTrace();
          }
          progress.post(新的Runnable(){
            @覆盖
            公共无效的run(){
              text.setText(更新);
              progress.setProgress(值);
            }
          });
        }
      }
    };
    新的线程(可运行)。开始();
  }

}
 

I am trying to put progress dialog on Click event of ListView as mentioned in code below but I am getting error "WindowManager$BadTokenException: Unable to add window -- token android.app.LocalActivityManager$LocalActivityRecord@44eddc70 is not valid; is your activity running?" can you give me any solution for this ?

code

 final ListView lv1 = (ListView) findViewById(R.id.list);
    lv1.setAdapter(new EfficientAdapter(this));

    lv1.setTextFilterEnabled(true);

    lv1.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> a, View v,
                final int position, long id) {
            final ProgressDialog pd = ProgressDialog.show(Add_Entry.this,
                    "", "Please Wait....");
            new Thread() {
                public void run() {

                    if (lv1.getItemAtPosition(position).equals(0)) {

                        Intent edit = new Intent(getApplicationContext(),
                                SourceOfStress.class);
                        TabGroupActivity parentActivity = (TabGroupActivity) getParent();
                        edit.putExtra("currActi", "AddEntry");
                        parentActivity.startChildActivity("SorceOfStress",
                                edit);

                    }
                    if (lv1.getItemAtPosition(position).equals(1)) {
                        Intent edit = new Intent(getParent(),
                                SourceOFSymptoms.class);
                        TabGroupActivity parentActivity = (TabGroupActivity) getParent();
                        edit.putExtra("currActi", "AddEntry");
                        parentActivity.startChildActivity(
                                "SourceOFSymptoms", edit);
                    }
                    if (lv1.getItemAtPosition(position).equals(2)) {
                        Intent edit = new Intent(getParent(),
                                Stress_Resilliance.class);
                        TabGroupActivity parentActivity = (TabGroupActivity) getParent();
                        edit.putExtra("currActi", "AddEntry");
                        parentActivity.startChildActivity(
                                "Stress_Resilliance", edit);
                    }
                    pd.dismiss();
                }
            }.start();
        }

    });

My file name is Add_Entry.java and error comes in line

ProgressDialog.show(Add_Entry.this,
                    "", "Please Wait....");

解决方案

You are trying to update the UI from a thread. You can't do that.

Use the Handler mechanism to update UI components.

Code taken from the website : Here the Handler class is used to update a ProgressBar view in a background Thread.

package de.vogella.android.handler;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.TextView;

public class ProgressTestActivity extends Activity {
  private Handler handler;
  private ProgressBar progress;
  private TextView text;


/** Called when the activity is first created. */

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    progress = (ProgressBar) findViewById(R.id.progressBar1);
    text = (TextView) findViewById(R.id.textView1);

  }

  public void startProgress(View view) {
    // Do something long
    Runnable runnable = new Runnable() {
      @Override
      public void run() {
        for (int i = 0; i <= 10; i++) {
          final int value = i;
          try {
            Thread.sleep(2000);
          } catch (InterruptedException e) {
            e.printStackTrace();
          }
          progress.post(new Runnable() {
            @Override
            public void run() {
              text.setText("Updating");
              progress.setProgress(value);
            }
          });
        }
      }
    };
    new Thread(runnable).start();
  }

} 

这篇关于窗口管理$ BadTokenException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆