2016-09-11 12 views
1

私はアンドロイドの初心者で、バックナビゲーションにはまったアンドロイドアプリを開発しようとしています。私の問題は: バックスラックをアクティビティとフラグメントで管理する方法。 frag1とAndroidで戻るナビゲーション

A1活性はA2の活動を呼び出し、A2活性は、リストのクリック時に、ユーザプロファイルをチェックA1活動のFRAG2の開口部にFRAG 2

でA1活動に呼び出し、我々するユーザーの一覧を表示しますflag_activity_reorder_to_frontを使用しており、FragmentManagerトランザクションでバックスタックにfrag1を追加しています。

ここをクリックすると、A2アクティビティの代わりにA1アクティビティが表示されます。

私はbackstackにback1を追加していないのですが、最初のバックで動作しますが、2番目のバックではアプリケーションから終了します。

提案がありますか?

答えて

0

単一のアクティビティを使用して、インターフェイス内のすべてのフラグメントトランザクションを処理してみてください。アクティビティはこのインタフェースを実装する必要があります。 例:

public interface FragChanger { 
    int NEXT_FRAGHELLO =1; 
    int NEXT_FRAGSET = 2; 
    int NEXT_FRAGSELECT =3; 
    int NEXT_FRAGLOG=4; 
    int NEXT_FRAGCHAT=5; 

    void onFragmentChange(int nextFrag); 


} 

次はあなたの活動にする必要があります:

@Override 
    public void onFragmentChange(int nextFrag) { 

     FragmentManager fm = getSupportFragmentManager(); 
     FragmentTransaction ft = fm.beginTransaction(); 


     switch (nextFrag){ 
      case NEXT_FRAGHELLO: 

       break; 
      case NEXT_FRAGSET: 
       FragSet fragSet = new FragSet(); 

       ft.replace(containerId,fragSet,"fragset"); 
       ft.addToBackStack(null); 
       ft.commit(); 

       break; 
      case NEXT_FRAGSELECT: 
       FragSelect fragSelect = new FragSelect(); 

       ft.replace(containerId,fragSelect,"fragselect"); 
       ft.addToBackStack(null); 
       ft.commit(); 
       break; 
      case NEXT_FRAGCHAT: 
       FragChat fragChat = new FragChat(); 
       ft.replace(containerId,fragChat,"fragchat"); 
       ft.addToBackStack(null); 
       ft.commit();} 
       break; 

      case NEXT_FRAGLOG: 

       ft.replace(containerId,fragLog,"fraglog"); 
       ft.addToBackStack(null); 
       ft.commit(); 
       break; 
} 

が戻ってあなたの活動の取り扱い:もちろん

@Override 
    public void onBackPressed() { 
     Log.d(TAG,"button back pressed"); 
     //Check which fragment is displayed an do whatever you need 
     //for example like this 
if (getSupportFragmentManager().findFragmentById(containerId) instanceof FragLog){ 
     Fragment fl = getSupportFragmentManager().findFragmentByTag("fraglog"); 
     if (fl !=null){ 
      FragmentManager fm = getSupportFragmentManager(); 
      FragmentTransaction ft = fm.beginTransaction(); 

      ft.remove(fl); 
      ft.commit(); 
      return; 
     } 
     } 


    } 

を、これは一例に過ぎず、あってもよいですあなたの場合に便利です

関連する問題