TabHostといくつかのタブを追加して追加機能をナビゲートすることにより、アプリケーションを拡張しようとしています。現在のアプリは基本的にデータベースを検索します。現在のアプリケーションワークフロー:
- アプリがログイン画面に読み込まれる
- ユーザーがログインします
- ユーザーは検索フォームを取得してデータを入力し、「検索」を押します
- 検索は結果のリストアクティビティをロードします...
新しいタブには、検索用の別のタブがあります。すべての検索アクティビティをそのタブグループ内に残してほしい。そこで、これらすべてを処理するアクティビティグループを作成しました。
public class searchGroup extends ActivityGroup {
public static searchGroup group;
private ArrayList<View> history;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.history = new ArrayList<View>();
group = this;
View view = getLocalActivityManager().startActivity("search", new Intent(this,search.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)).getDecorView();
replaceView(view);
}
public void replaceView(View v) {
history.add(v);
setContentView(v);
}
public void back() {
if(history.size() > 0) {
history.remove(history.size()-1);
setContentView(history.get(history.size()-1));
}else {
finish();
}
}
@Override
public void onBackPressed() {
searchGroup.group.back();
return;
}
}
私の検索アクティビティの[検索]ボタンonClickListener:
view = searchGroup.group.getLocalActivityManager().startActivity("search_results",new Intent(search.this, search_results.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)).getDecorView();
searchGroup.group.replaceView(view);
これは私がクラッシュするところです:
02-11 13:43:49.481:E / AndroidRuntime(1165):java.lang.RuntimeException:アクティビティを開始できませんComponentInfo {com.myApp / com.myApp.search_results}:android.view.WindowManager $ BadTokenException:追加できませんwindow-token android.app.LocalActivityManager $ LocalActivityRecord@40543360は無効です。あなたの活動は実行されていますか?
ただし、search_resultアクティビティのonCreateから1行のコメントを外すと、次のようになります。
new LoadSearches().execute();
クラッシュはありませんが、明らかに何も得られません。LoadSearches()はAsyncTaskであり、サーバーに出て検索文字列を実行し、返されたデータをonPostExecute()のListActivityに入力するという手間のかかる作業を行います。
ここでクラッシュする理由がよくわかりませんが、アクティビティを切り替えると通常はクラッシュしません。これにどのように取り組むべきですか?もっと良い方法はありますか?フラグメントについて少し読んだことがありますが、まだ何もしていません。