2016-10-25 2 views
0

私はナビゲーションドロワとメインのアクティビティを持っています。ドロワーナビゲーション付きAndroidホームボタンは、回転画面で動作するのをやめます。

メインアティビティが起動するとMainFragmentがロードされます。 この瞬間にすべてうまくいきます。ハンバーガーのアイコンが表示され、メインのフラグメントがロードされました。

次に、ボタンをクリックしてsecondFragmentを読み込みます。 2番目のフラグメントをロードした後、私は問題なくメインアクティビティに戻るためにバックボタンとホームボタンを使用できます。

2番目のフラグメントがロードされているときに回転画面を作成すると、戻るボタンが正常に機能し続けますが、ホームボタンが消えてハンバーガーアイコンが表示されます。

私は間違っていますか?

public class MainActivity extends AppCompatActivity { 
     private ActionBarDrawerToggle actionBarDrawerToggle; 
     private DrawerLayout drawerLayout; 
     private Toolbar toolbar; 
     private CharSequence mDrawerTitle; 
     private CharSequence mTitle; 
     private String mSubTitle; 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 
      toolbar = (Toolbar) findViewById(R.id.toolbar); 
      setSupportActionBar(toolbar); 
      initNavigationDrawer(); 


      if (savedInstanceState != null) { 
        return; 
      } 

      MainActivityFragment mainFragment = new MainActivityFragment(); 

      firstFragment.setArguments(getIntent().getExtras()); 
      // Add the fragment to the 'fragment_container' FrameLayout 
      FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 

      //transaction.replace(R.id.fragment_container, firstFragment); 
      transaction.replace(R.id.fragment_container, mainFragment, "princ"); 
      transaction.commit(); 

     } 


     @Override 
     public boolean onOptionsItemSelected(MenuItem item) { 
      // Only handle with DrawerToggle if the drawer indicator is enabled. 
      if (actionBarDrawerToggle.isDrawerIndicatorEnabled() && 
        actionBarDrawerToggle.onOptionsItemSelected(item)) { 
       return true; 
      } 
      // Handle your other action bar items... 
      return super.onOptionsItemSelected(item); 
     } 
     } 

     public Fragment getCurrentFragment(){ 
      FragmentManager frgmgr = getSupportFragmentManager(); 
      return frgmgr.findFragmentById(R.id.fragment_container); 
     } 

     @Override 
     public void onBackPressed() { 
      if (drawerLayout != null) { 
       if (drawerLayout.isDrawerOpen(GravityCompat.START)) { 
        drawerLayout.closeDrawer(GravityCompat.START); 
        return; 
       } 
      } 
      if ((getCurrentFragment() instanceof MainFragment)) { 
       finish(); 
      } else if (getSupportFragmentManager().getBackStackEntryCount() > 0) { 
       getSupportFragmentManager().popBackStack(); 
      } else super.onBackPressed(); 
     } 


     public void initNavigationDrawer() { 
      NavigationView navigationView = (NavigationView) findViewById(R.id.navigation_view); 
      navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { 
       @Override 
       public boolean onNavigationItemSelected(MenuItem menuItem) { 
        FragmentManager frgmgr = getSupportFragmentManager(); 
        FragmentTransaction transaction = frgmgr.beginTransaction(); 
        Fragment cur_frag; 
        // Handle navigation view item clicks here. 
        int id = menuItem.getItemId(); 

        switch (id) { 
         case R.id.home: 
          cur_frag = frgmgr.findFragmentById(R.id.fragment_container); 
          if (!(cur_frag instanceof MainActivityFragment)) { 
           MainActivityFragment frag = new MainActivityFragment(); 
           transaction.setCustomAnimations(R.anim.enter_from_left, R.anim.exit_to_right, R.anim.enter_from_right, R.anim.exit_to_left); 
           transaction.replace(R.id.fragment_container, frag); 
           transaction.commit(); 
           break; 
          } 
          drawerLayout.closeDrawers(); 
          break; 
         case R.id.logout_drw: 
          finish(); 

        } 
        drawerLayout.closeDrawer(GravityCompat.START); 
        return true; 
       } 
      }); 
      View header = navigationView.getHeaderView(0); 
      TextView tv_email = (TextView) header.findViewById(R.id.tv_email); 
      tv_email.setText("Agendamento"); 

      drawerLayout = (DrawerLayout) findViewById(R.id.drawer); 
      mTitle = mDrawerTitle = getTitle(); 

      actionBarDrawerToggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.drawer_open, R.string.drawer_close) { 
       @Override 
       public void onDrawerClosed(View v) { 
        super.onDrawerClosed(v); 
       } 

       @Override 
       public void onDrawerOpened(View v) { 
        super.onDrawerOpened(v); 
       } 
      }; 
      drawerLayout.addDrawerListener(actionBarDrawerToggle); 
      actionBarDrawerToggle.syncState(); 

      if (toolbar != null) { 
       getSupportFragmentManager().addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() { 
        @Override 
        public void onBackStackChanged() { 
         int i=getSupportFragmentManager().getBackStackEntryCount(); 
         if ((i > 0) || (!(getCurrentFragment() instanceof MainActivityFragment))) { 
          getSupportActionBar().setDisplayHomeAsUpEnabled(true); // show back button 
          toolbar.setNavigationOnClickListener(new View.OnClickListener() { 
           @Override 
           public void onClick(View v) { 
            onBackPressed(); 
           } 
          }); 
         } else { 
          getSupportActionBar().setDisplayHomeAsUpEnabled(false); 
          actionBarDrawerToggle.syncState(); 
          toolbar.setNavigationOnClickListener(new View.OnClickListener() { 
           @Override 
           public void onClick(View v) { 
            drawerLayout.openDrawer(GravityCompat.START); 
           } 
          }); 
         } 
        } 
       }); 

      } 
     } 
    } 

主素片:

public class MainFragment extends Fragment { 
    public MainFragment() { 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    } 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View view=inflater.inflate(R.layout.fragment_main, container, false); 
     Button butCons= (Button) view.findViewById(R.id.butcons); 

     butCons.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       SecundaryFrag frag = new SecundaryFragFrag(); 
       // Add the fragment to the 'fragment_container' FrameLayout 
       FragmentTransaction transaction=getFragmentManager().beginTransaction(); 
       transaction.setCustomAnimations(R.anim.enter_from_left, R.anim.exit_to_right, R.anim.enter_from_right, R.anim.exit_to_left); 

       transaction.replace(R.id.fragment_container, frag); 
       transaction.addToBackStack(null); 
       transaction.commit(); 

      } 
     }); 
     return view; 
    } 
} 

セカンダリフラグメント:回転後

public class SecundaryFrag extends Fragment{ 
    public SecundaryFrag() { 
    } 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    } 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     View view=inflater.inflate(R.layout.fragment_consulta_ag, container, false); 
     return view; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
      case android.R.id.home: 
       ((MainActivity)getActivity()).onBackPressed(); 
       return true; 
      default: 
       return super.onOptionsItemSelected(item); 
     } 
    } 
} 

:メイン断片と

After Rotation Image

メインactivty :回転前 Main Activity

Before Rotation

答えて

1

私はそれがビューが姿勢変更後に再作成されているという事実に関係していると信じています。

がトリガーされたとき、私は特にMainActivityからonCreate()を詳しく見ていきます。

1つのオプションは、フラグメントを保持してから作成することです。また、オリエンテーションをキャッチしてレクリエーションをオフにして、アプリケーションで自分で処理することもできます。ここでは両方のオプションについて説明しています。

+0

はい、どうしたらいいですか?それを修正する。あなたはいくつかのヒントを持っていますか? –

+0

一つの選択肢は、フラグメントを保持してonCreateに復元するというGoogleの勧告に従うことです。また、オリエンテーションをキャッチしてレクリエーションをオフにし、アプリケーションでそれを処理することもできます。ここでは、両方のオプションがhttps://developer.android.com/guide/topics/resources/runtime-changes.htmlで説明されています。 – petrumo

関連する問題