回答編集履歴
3
追記
answer
CHANGED
@@ -104,4 +104,25 @@
|
|
104
104
|
なので、`Fragment#startActivity(Intent)`を呼ぶ前に、設置されているActivityの`Acitivity#finish()`呼んでしまった場合、`Activity#startActivity()`が呼び出せなくなるのだと思います。
|
105
105
|
実際のソースコードでは呼ぶ前にnullチェックをしており、nullの場合に件の例外を投げるようになっていました。
|
106
106
|
|
107
|
-
ですので、上に書いたように、`getActivity().finish();`を非同期処理完了時に実行するのがいいと思います。
|
107
|
+
ですので、上に書いたように、`getActivity().finish();`を非同期処理完了時に実行するのがいいと思います。
|
108
|
+
|
109
|
+
---
|
110
|
+
|
111
|
+
|
112
|
+
`getActivity().finish();`を`postExecute`内に移してみてください。
|
113
|
+
|
114
|
+
```Java
|
115
|
+
public void onClick(DialogInterface dialog, int which) {
|
116
|
+
AsyncDetail asyncDetail = new AsyncDetail(new AsyncTaskCallback() {
|
117
|
+
@Override
|
118
|
+
public void postExecute(String result) {
|
119
|
+
Intent intent = new Intent(getActivity(), DetailActivity.class);
|
120
|
+
intent.putExtra("result", result);
|
121
|
+
startActivity(intent);
|
122
|
+
getActivity().finish(); // ここに移す
|
123
|
+
}
|
124
|
+
});
|
125
|
+
// getActivity().finish();
|
126
|
+
asyncDetail.execute("URL", id);
|
127
|
+
}
|
128
|
+
```
|
2
追記
answer
CHANGED
@@ -94,4 +94,14 @@
|
|
94
94
|
```
|
95
95
|
|
96
96
|
非同期処理開始前に、Activityをfinishしているのに、非同期処理完了時に、`getActivity()`でActivityを取得しようとしています。
|
97
|
-
`getActivity().finish();`を非同期処理完了時に実行するか、別の方法でContextを取得してみてください。
|
97
|
+
`getActivity().finish();`を非同期処理完了時に実行するか、別の方法でContextを取得してみてください。
|
98
|
+
|
99
|
+
|
100
|
+
---
|
101
|
+
|
102
|
+
|
103
|
+
Fragmentのコードを確認したところ、`Fragment#startActivity(Intent)`はFragment自身が設置されているActivityの`Activity#startActivity()`を呼ぶような処理をしています。
|
104
|
+
なので、`Fragment#startActivity(Intent)`を呼ぶ前に、設置されているActivityの`Acitivity#finish()`呼んでしまった場合、`Activity#startActivity()`が呼び出せなくなるのだと思います。
|
105
|
+
実際のソースコードでは呼ぶ前にnullチェックをしており、nullの場合に件の例外を投げるようになっていました。
|
106
|
+
|
107
|
+
ですので、上に書いたように、`getActivity().finish();`を非同期処理完了時に実行するのがいいと思います。
|
1
追記
answer
CHANGED
@@ -71,4 +71,27 @@
|
|
71
71
|
目的にそうとしたら、大まかなコードですが、こんな感じになるのではないでしょうか。
|
72
72
|
|
73
73
|
|
74
|
-
`AsyncDetail`にも怪しいコードがありますが、質問内容とは離れるため、ひとまずはノータッチです。すいません。
|
74
|
+
`AsyncDetail`にも怪しいコードがありますが、質問内容とは離れるため、ひとまずはノータッチです。すいません。
|
75
|
+
|
76
|
+
|
77
|
+
---
|
78
|
+
|
79
|
+
2015/10/4 追記
|
80
|
+
例外のスタックトレースが無いので、推測になってしまいますが、原因は以下の部分かもしれません。
|
81
|
+
```Java
|
82
|
+
public void onClick(DialogInterface dialog, int which) {
|
83
|
+
AsyncDetail asyncDetail = new AsyncDetail(new AsyncTaskCallback() {
|
84
|
+
@Override
|
85
|
+
public void postExecute(String result) {
|
86
|
+
Intent intent = new Intent(getActivity(), DetailActivity.class); // ココ
|
87
|
+
intent.putExtra("result", result);
|
88
|
+
startActivity(intent);
|
89
|
+
}
|
90
|
+
});
|
91
|
+
getActivity().finish(); // ココ
|
92
|
+
asyncDetail.execute("URL", id);
|
93
|
+
}
|
94
|
+
```
|
95
|
+
|
96
|
+
非同期処理開始前に、Activityをfinishしているのに、非同期処理完了時に、`getActivity()`でActivityを取得しようとしています。
|
97
|
+
`getActivity().finish();`を非同期処理完了時に実行するか、別の方法でContextを取得してみてください。
|