2016-08-24 6 views
0

私はMainActivityの中でNavigationViewを実装しました。 MainActivityにはFragmentコンテナが含まれています。デフォルトのHomeFragmentはこのコンテナの内側にあります。次に、このコンテナに別のFragment(SecondFragment)を追加します。今すぐハンガーのアイコンは、戻るナビゲーションアイコン(戻る矢印アイコン)に変更する必要がありますこれをクリックして前のフラグメントに行く必要があります。しかし、今すぐホームボタン(戻る矢印アイコン)をクリックしてナビゲーション引き出しを開きます。これは私のMainActivity` パブリッククラスMainActivityがAppCompatActivity {NavigationViewのアイコンをクリックしてフラグメントを処理するにはどうすればよいですか?

private Toolbar toolbar; 
private NavigationView navigationView; 
private DrawerLayout drawerLayout; 
ActionBarDrawerToggle actionBarDrawerToggle; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 


    navigationView = (NavigationView) findViewById(R.id.navigation_view); 


    navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { 


     @Override 
     public boolean onNavigationItemSelected(MenuItem menuItem) { 


      if (menuItem.isChecked()) menuItem.setChecked(false); 
      else menuItem.setChecked(true); 

      drawerLayout.closeDrawers(); 


      switch (menuItem.getItemId()) { 




       default: 
        Toast.makeText(getApplicationContext(), "Nothing", Toast.LENGTH_SHORT).show(); 
        return true; 

      } 
     } 
    }); 


    drawerLayout = (DrawerLayout) findViewById(R.id.drawer); 
    actionBarDrawerToggle = new ActionBarDrawerToggle(this, drawerLayout,toolbar, R.string.openDrawer, R.string.closeDrawer) { 

     @Override 
     public void onDrawerClosed(View drawerView) { 

      super.onDrawerClosed(drawerView); 
     } 

     @Override 
     public void onDrawerOpened(View drawerView) { 


      super.onDrawerOpened(drawerView); 
     } 
    }; 

    drawerLayout.setDrawerListener(actionBarDrawerToggle); 


    actionBarDrawerToggle.syncState(); 


} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 

    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 

    int id = item.getItemId(); 


    if (id == R.id.action_settings) { 
     return true; 
    } 
    if (id == android.R.id.home) { 

     return false; 
    } 
    return super.onOptionsItemSelected(item); 
}} 

`

を拡張であり、これは` パブリッククラスSecondFragmentが断片{ のTextViewの受信トレイを拡張し、私のSecondFragmentコードです。

あなたがキーコードで扱うことができる
@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View v = inflater.inflate(R.layout.second_fragment, container, false); 
    ((AppCompatActivity) getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    setHasOptionsMenu(true); 
    return v; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 

    int id = item.getItemId(); 

    if (id == android.R.id.home) { 
     Log.e("backIcon", "backIcon"); 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
}} 

`

+0

前のフラグメントに戻る場合.....(if == R.id.home)onBackPressed()メソッドを呼び出してtrueを返します。 –

+0

ログそのものは印刷されません.Instead Navigation Drawerが開きます – Aravindraj

+0

** onOpitonItemSelected()**メインアクティビティのメソッドは、ホームボタンをクリックしたときに呼び出される必要があります。 ** Log **を置くことでそれを試すこともできます –

答えて

0

@Override 
public void onResume() { 

    super.onResume(); 

    getView().setFocusableInTouchMode(true); 
    getView().requestFocus(); 
    getView().setOnKeyListener(new View.OnKeyListener() { 
     @Override 
     public boolean onKey(View v, int keyCode, KeyEvent event) { 

      if (event.getAction() == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK){ 

       // handle back button 

       return true; 

      } 

      return false; 
     } 
    }); 
} 

OR

あなたはonOptionsItemSelectedアイテムのIDを取得する必要があります。 それに応じて、あなたはバックプレスを決定することができます。

関連する問題