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) with 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(ネイティブ メソッド) で
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): dalvik.system.NativeStart.main(ネイティブ メソッド) で

私のコードはリストビュー用です

@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

DialogActivityは全く別物です。たとえば、サービスまたはブロードキャスト レシーバは を開始できますActivityが、 を開始することはできませんDialog。一般に、 は にDialog属しActivityActivityは のライフサイクルDialog(つまり、作成、表示、破棄など) を制御します。注: にDialog属さないを使用できますActivityが、これは特殊なケースです。

のようなものをユーザーに表示したい場合がありますがDialog、そのためには を使用する必要がありますActivity。良い例はNotification. ユーザーが通知バーから を選択したときに、Notificationを表示したい場合がありますDialogDialogただし、から を開始することはできませんNotification。代わりに、 を使用するActivityを使用しTheme.Dialogます。はのActivityように動作Activityしますが、ユーザーには のように見えますDialog(つまり、画面全体を占めるわけではなく、背景が透明なので、ユーザーはActivityその下を見ることができます)。

于 2013-04-19T14:57:36.320 に答える
1

バックグラウンド スレッドでアダプタのデータ リストが変更され、リストビューの更新が要求されたときに例外が発生し、このクラッシュが発生します。

MyTask AsyncTask で何をしようとしているのかを投稿していただけますか?クラッシュの原因を特定するのに役立つ可能性があります。

于 2013-04-18T07:38:19.737 に答える