1

在这里我的问题是自定义对话框和活动之间的真正区别是什么,我将其主题设置为对话框并作为对话框打开,我已经使用了这两个,我理解的一些小的区别如下

  1. 编码保留在活动中的其他文件和自定义对话框中的同一文件中(如果我们还没有为对话框创建新的类文件),
  2. 活动保持在活动堆栈中,而对话框则不。

还有其他区别吗?所以我们需要自定义对话来代替活动作为对话,反之亦然,

我当前的问题是,当我单击 listitem 并打开新活动(如此处的对话框)时,当我按下返回按钮并再次单击项目时,它“意外停止”,并且无法理解错误,我的错误如下

04-18 12:21:18.945:E/AndroidRuntime(915):致命异常:主要
04-18 12:21:18.945: E/AndroidRuntime(915): java.lang.IllegalStateException: 适配器的内容已更改,但 ListView 未收到通知。确保适配器的内容不是从后台线程修改的,而只是从 UI 线程修改的。[在 ListView(2131230777, class android.widget.ListView) 和 Adapter(class com.logicbridge.lazyloader.MyOrdersLazyAdapter)]
04-18 12:21:18.945: E/AndroidRuntime(915): 在 android.widget.ListView.layoutChildren(ListView.java:1538)
04-18 12:21:18.945: E/AndroidRuntime(915): 在 android.widget.AbsListView$CheckForTap.run(AbsListView.java:2728)
04-18 12:21:18.945: E/AndroidRuntime(915): 在 android.os.Handler.handleCallback(Handler.java:605)
04-18 12:21:18.945: E/AndroidRuntime(915): 在 android.os.Handler.dispatchMessage(Handler.java:92)
04-18 12:21:18.945: E/AndroidRuntime(915): 在 android.os.Looper.loop(Looper.java:137)
04-18 12:21:18.945: E/AndroidRuntime(915): 在 android.app.ActivityThread.main(ActivityThread.java:4424)
04-18 12:21:18.945: E/AndroidRuntime(915): 在 java.lang.reflect.Method.invokeNative(Native Method)
04-18 12:21:18.945: E/AndroidRuntime(915): 在 java.lang.reflect.Method.invoke(Method.java:511)
04-18 12:21:18.945: E/AndroidRuntime(915): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
04-18 12:21:18.945: E/AndroidRuntime(915): 在 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)

我的代码用于列表视图

@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;
            }
        });
    }

发生这种情况是因为我使用了新活动而不是对话框吗?

4

2 回答 2

7

Dialog并且Activity是完全不同的东西。例如,服务或广播接收器可以启动Activity,但不能启动Dialog。通常,aDialog属于 anActivity并且Activity控制着 the 的生命周期Dialog(即:何时创建、显示、关闭等)。注意:您可以拥有Dialog不属于的 a Activity,但这是一种特殊情况。

有时您想向用户展示一些看起来像 a 的东西Dialog,但您需要为此使用 an Activity。一个很好的例子是Notification. 有时,当用户Notification从通知栏中选择一个时,您想向他显示一个Dialog. 但是你不能Dialog从 a 开始 a Notification。相反,您使用Activity使用Theme.Dialog. 的Activity行为类似于 a Activity,但对用户来说它看起来像 aDialog(即:它不占用整个屏幕,它具有透明背景,因此用户可以看到它Activity下面的内容,等等)

于 2013-04-19T14:57:36.320 回答
1

当适配器的数据列表在后台线程中更改并要求更新导致此崩溃的列表视图时,会发生异常。

您能否在 MyTask AsyncTask 中发布您想要做什么,这可能有助于确定崩溃的原因。?

于 2013-04-18T07:38:19.737 回答