这里我的问题是自定义对话框和活动之间真正的区别是什么,我将其主题作为对话框打开并作为对话框打开, 我已经使用了这两个,我理解的一些小差异是遵循
还有其他区别吗?所以我们需要自定义对话框代替活动作为对话,反之亦然,
我当前的问题是当我点击listitem并打开新活动(此处为对话框),当我按下后退按钮并再次单击项目时“意外停止”,并且无法理解错误,我的错误是如下
04-18 12:21:18.945: E/AndroidRuntime(915): FATAL EXCEPTION: main 04-18 12:21:18.945: E/AndroidRuntime(915): java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread. [in ListView(2131230777, class android.widget.ListView) with Adapter(class com.logicbridge.lazyloader.MyOrdersLazyAdapter)] 04-18 12:21:18.945: E/AndroidRuntime(915): at android.widget.ListView.layoutChildren(ListView.java:1538) 04-18 12:21:18.945: E/AndroidRuntime(915): at android.widget.AbsListView$CheckForTap.run(AbsListView.java:2728) 04-18 12:21:18.945: E/AndroidRuntime(915): at android.os.Handler.handleCallback(Handler.java:605) 04-18 12:21:18.945: E/AndroidRuntime(915): at android.os.Handler.dispatchMessage(Handler.java:92) 04-18 12:21:18.945: E/AndroidRuntime(915): at android.os.Looper.loop(Looper.java:137) 04-18 12:21:18.945: E/AndroidRuntime(915): at android.app.ActivityThread.main(ActivityThread.java:4424) 04-18 12:21:18.945: E/AndroidRuntime(915): at java.lang.reflect.Method.invokeNative(Native Method) 04-18 12:21:18.945: E/AndroidRuntime(915): at java.lang.reflect.Method.invoke(Method.java:511) 04-18 12:21:18.945: E/AndroidRuntime(915): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 04-18 12:21:18.945: E/AndroidRuntime(915): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 04-18 12:21:18.945: E/AndroidRuntime(915): at dalvik.system.NativeStart.main(Native Method)
我的代码适用于listview
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.my_order_list);
initControls();
loadList();
}
private void initControls() {
progress = new ProgressDialog(this);
progress.setMessage("Loading...");
list = (ListView) findViewById(R.id.my_order_List);
}
private void loadList() {
StaticItems.myorderadapter = new MyOrdersLazyAdapter(MyOrders.this,
StaticItems.myOrderListArr);
list.setAdapter(StaticItems.myorderadapter);
list.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
// TODO Auto-generated method stub
// Starts new activity after some process
ArrayList<String> str = new ArrayList<String>();
str.add("loadOrdersDetail");
str.add("2");
new MyTask(str).execute();
return false;
}
});
}
这是否因为我使用了新活动而不是对话?
答案 0 :(得分:7)
Dialog
和Activity
完全不同。例如,服务或广播接收器可以启动Activity
,但无法启动Dialog
。通常,Dialog
属于Activity
,Activity
控制Dialog
的生命周期(即:创建,显示,解散等)。 注意:您可以拥有不属于Dialog
的{{1}},但这是一种特殊情况。
有时,您希望向用户显示看似Activity
的内容,但您需要使用Dialog
。一个很好的例子是Activity
。有时,当用户从通知栏中选择Notification
时,您希望向他显示Notification
。但是,您无法从Dialog
开始Dialog
。相反,您使用的是使用Notification
的{{1}}。 Activity
的行为类似于Theme.Dialog
,但对于用户,它看起来像Activity
(即:它不占用整个屏幕,它具有透明背景,以便用户可以看到它下面的Activity
等。)
答案 1 :(得分:1)
当在后台线程中更改适配器的数据列表并要求更新listview导致此崩溃时,会发生异常。
你可以在MyTask AsyncTask中发布你想要做什么,这可能有助于确定崩溃的原因。?