ここで私の質問は、カスタムダイアログと、テーマをダイアログとして作成し、ダイアログとして開いているアクティビティの本当の違いは何ですか。これらの両方を使用しました。私が理解している小さな違いのいくつかは次のとおりです
- コーディングは、アクティビティ内の他のファイルとカスタム ダイアログ内の同じファイルに残ります (ダイアログ用の新しいクラス ファイルを作成していない場合)。
- アクティビティはアクティビティ スタックに残りますが、ダイアログは残りません。
他に違いはありますか?したがって、ダイアログとしてのアクティビティの代わりにカスタム ダイアログが必要であり、その逆も同様です。
私の現在の問題は、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;
}
});
}
これは、ダイアログの代わりに新しいアクティビティを使用したために発生しますか??