0

余分な機能をナビゲートするためにTabHostといくつかのタブを追加してアプリケーションを拡張しようとしています。現在のアプリは基本的にデータベースを検索します。現在のアプリケーションのワークフロー: タブを使用してアクティビティエラーを開始できません

  • ユーザーでログイン画面へ

    1. アプリケーション負荷
    2. ユーザログは、検索フォームや入力データを取得し
    3. 検索結果のリストの活動をロードし、「検索」を押します。 ..

    新しいタブでは、検索用に別のタブがあります。すべてのseachアクティビティをそのタブグループ内に残しておきたい。だから私は、これらのすべてを処理するための活動グループを作成しました:

    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 $ BadToke nException:ウィンドウを追加できません - トークン[email protected]は です。あなたの活動は実行されていますか?しかし

    、私はsearch_result活動ののonCreateから行コメントを解除した場合:

    new LoadSearches().execute(); 
    

    ノークラッシュが、私は明らかに何を取得。 LoadSearches()はAsyncTaskであり、サーバーに行き、検索文字列を実行し、返されたデータをonPostExecute()のListActivityに入力するという重い作業を行います。

    ここではなぜクラッシュするのか分かりませんが、通常はアクティビティを切り替えると理解できません。これにどのように取り組むべきですか?より良い方法がありますか?私は断片について少しは読んだが、まだ何もしていない。

  • +0

    私もこのエラーが発生しています –

    答えて

    1

    私は、多くの人が私の髪を引き出して、断片と一緒に行くことを決めました。一部のリソースは、私は、フラグメントおよびタブを使用するために私の既存のアプリを変換するために有用であることが判明:私も私の活動の間のパスデータに問題があった

    Fragments in Android 2.2.1, 2.3, 2.0. Is this possible?

    http://thepseudocoder.wordpress.com/2011/10/04/android-tabs-the-fragment-way/

    。インテント/バンドルを使用してアクティビティ間でデータをやりとりする方法は、実際には同じことをするわけではありませんが、わずかに変更して動作させることもできます。

    古い方法(Activity1からActivity2にデータを渡す):私はActivity2のための初期化子を作成する必要がありましたフラグメントを使用した

    Activity1

    Intent myIntent = new Intent(search.this, search_results.class); 
    Bundle b = new Bundle(); 
    b.putString("SEARCHSTRING", strSearch); 
    myIntent.putExtras(b); 
    startActivityForResult(myIntent, 0); 
    

    Activity2

    Bundle b = getIntent().getExtras(); 
    strSearch = b.getString("SEARCHSTRING"); 
    

    public search_results newInstance(String strSearch){ 
        search_results f = new search_results(); 
        Bundle b = new Bundle(); 
        b.putString("SEARCHSTRING", strSearch); 
        f.setArguments(b);   
        return f;  
    } 
    

    この、フラグメントを使用して、新しい方法で使用した:Activity2(onCreateView)

    Bundle b = getArguments(); 
    strSearch = b.getString("SEARCHSTRING"); 
    

    は、私はこのすべての情報を見つけるすることは困難だったとして、私はこれが誰かの役に立てば幸い

    Fragment newFragment = new search_results().newInstance(strSearch); 
    FragmentTransaction ft = getFragmentManager().beginTransaction(); 
    ft.replace(R.id.realtabcontent, newFragment); 
    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 
    ft.addToBackStack(null); 
    ft.commit(); 
    

    Avtivity1

    を1つの場所で。

    関連する問題