我有一个列表视图,我希望当我触摸列表视图中的项目时,我的进度对话框会打开并显示加载消息。 一切都很好但是当我触摸项目看到对话框我的应用程序崩溃。但如果我滚动列表,然后触摸项目我的应用程序确实给出了错误。 当数据从网络收集并显示时,我会在下一个活动中关闭该对话框。
这是我的listview填充鳕鱼
public void fill(final ArrayAdapter<RssParser.Item> adapter, final RssParser.Item item, final int position)
{
try
{
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
RecruitmentActivity.handler.post(new Runnable() {
@Override
public void run() {
ActivityFirst.dismissLoadingDialog();
txtTitle.setText(item.title);
txtDate.setText(item.pubDate);
txt_time.setText(item.time);
txtDescription.setText(item.description);
layoutRoot.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
((Activity) context).runOnUiThread(new Runnable() {
@Override
public void run() {
if (progress == null) {
progress = new ProgressDialog(context);
progress.setTitle("title");
progress.setMessage("loading");
progress.setCanceledOnTouchOutside(false);
progress.setCancelable(false);
}
progress.show();
G.SelectedApplication = item;
Intent intent = new Intent(G.context, Adapter_Description.class)
.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra("INPUT", item.link + "");
intent.putExtra("INPUT_DESC", item.description + "");
G.context.startActivity(intent);
}
});
}
});
}
});
}
});
thread.start();
这是我的解雇方法
public static void dismissLoadingDialog() {
if (progress != null && progress.isShowing()) {
progress.dismiss();
}
}
这是我的日志
09-07 20:44:23.227:E / AndroidRuntime(1461):致命异乎寻常:主要 09-07 20:44:23.227:E / AndroidRuntime(1461):android.view.WindowManager $ BadTokenException:无法添加窗口 - 令牌android.os.BinderProxy@a65f2178无效;你的活动在运行吗? 09-07 20:44:23.227:E / AndroidRuntime(1461):
在android.view.ViewRootImpl.setView(ViewRootImpl.java:567) 09-07 20:44:23.227:E / AndroidRuntime(1461):
在android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:246) 09-07 20:44:23.227:E / AndroidRuntime(1461):
在android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69) 09-07 20:44:23.227:E / AndroidRuntime(1461):** 在android.app.Dialog.show(Dialog.java:281) 09-07 20:44:23.227:E / AndroidRuntime(1461):
在 com.employment.app.find_work.recruitment.AdapterItems $ ViewHolder $ 1 $ 1 $ 1.onClick(AdapterItems.java:89 09-07 20:44:23.227:E / AndroidRuntime(1461):
在android.view.View.performClick(View.java:4204) 09-07 20:44:23.227:E / AndroidRuntime(1461):**
在android.view.View $ PerformClick.run(View.java:17355) 09-07 20:44:23.227:E / AndroidRuntime(1461):
在android.os.Handler.handleCallback(Handler.java:725) 09-07 20:44:23.227:E / AndroidRuntime(1461):
在android.os.Handler.dispatchMessage(Handler.java:92) 09-07 20:44:23.227:E / AndroidRuntime(1461):
在android.os.Looper.loop(Looper.java:137) 09-07 20:44:23.227:E / AndroidRuntime(1461):
在android.app.ActivityThread.main(ActivityThread.java:5041) 09-07 20:44:23.227:E / AndroidRuntime(1461):
at java.lang.reflect.Method.invokeNative(Native Method) 09-07 20:44:23.227:E / AndroidRuntime(1461):
在java.lang.reflect.Method.invoke(Method.java:511) 09-07 20:44:23.227:E / AndroidRuntime(1461):
在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:793) 09-07 20:44:23.227:E / AndroidRuntime(1461):
在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 09-07 20:44:23.227:E / AndroidRuntime(1461):
在dalvik.system.NativeStart.main(本地方法)
答案 0 :(得分:0)
在
中添加代码点击事件代码your_activity_name.runOnUiThread(new Runnable() {
@Override
public void run() {
if (progress == null) {
progress = new ProgressDialog(context);
progress.setTitle("title");
progress.setMessage("loading");
progress.setCanceledOnTouchOutside(false);
progress.setCancelable(false);
}
progress.show();
G.SelectedApplication = item;
Intent intent = new Intent(G.context, Adapter_Description.class)
.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra("INPUT", item.link + "");
intent.putExtra("INPUT_DESC", item.description + "");
G.context.startActivity(intent);
}
});
将您的代码放入run方法。
答案 1 :(得分:0)
1)确保“context”变量指向活动,而不是其他任何一个。
2)非常有趣,因为在这种情况下你应该得到“无法触摸视图”异常,而不是错误的窗口绑定标记异常。 有可能:
您的申请已经按照规定已经死亡(即过去的onPause())。
由于线程嵌套混乱,您正在触摸UI线程外部的UI控件,这是唯一可以修改视图的控件。尝试: runOnUiThread(new Runnable(){
@Override
public void onClick(View v) {
runOnUiThread(new Runnable() {
// Your code related to controlling the progress bar
})
}
您还可以使用处理程序通知视图(实际上更可取)
3)确保在旧活动消失之前解除对话框。