窗口管理$ BadTokenException [英] WindowManager$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屋!