2014-11-05 3 views
3

У меня есть MainActivity, который содержит FragmentA. Когда я нажимаю на Fragmenta, это происходит:Реализация Вверх навигации по фрагменту

getFragmentManager().beginTransaction().replace(R.id.container,new PrefFragment()).addToBackStack("back").commit(); 

У меня есть это в моем манифесте:

<activity> 
<meta-data 
       android:name="android.support.PARENT_ACTIVITY" 
       android:value="com.example.myfirstapp.MainActivity" /> 
</activity> 

и это в MainActivity:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_head_sound); 
    if (savedInstanceState == null) { 
     getFragmentManager().beginTransaction() 
       .add(R.id.container, new FragmentA) 
       .commit(); 
    } 
    getActionBar().setDisplayHomeAsUpEnabled(true); 

} 

но кнопка навигации вверх всегда видна ,

FragmentB содержит этот код:

@Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     int id=item.getItemId(); 
     switch (id) 
     { 
      case android.R.id.home: 
       getFragmentManager().popBackStack(); 
       Toast.makeText(getActivity(),"CLick",Toast.LENGTH_SHORT).show(); 

       break; 
     } 
     return super.onOptionsItemSelected(item); 



    } 

Этот код не запускается. Мне нужно реализовать навигацию только в FragmentB. Как я могу это сделать?

+0

деЫпзЬапса действия бара в этом фрагменте и setDisplayHomeAsUpEnabled ложного –

ответ

2

Насколько я понимаю, навигационная панель должна работать только в FragmentB, тогда как если FragmentA будет отображаться, навигационная панель будет скрыта. Если это так, то в Управлении удалите getActionBar().setDisplayHomeAsUpEnabled(true); от onCreate.

Также вы должны вернуть true при обработке щелчка меню и переместить объект onOptionsItemSelected (MenuItem) в Activity, так как клик меню Android android.R.id.home только доставляется в Activity.

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case android.R.id.home: 
      getFragmentManager().popBackStack(); 
      Toast.makeText(getActivity(),"CLick",Toast.LENGTH_SHORT).show(); 
      return true; //Notice you must returning true here 

     default: 
      return super.onOptionsItemSelected(item); 
    } 
} 

В Fragmenta

@Override 
public void onAttach(Activity a) { 
    super.onAttach(a); 
    a.getActionBar().setDisplayHomeAsUpEnabled(false); 
} 

В FragmentB

@Override 
public void onAttach(Activity a) { 
    super.onAttach(a); 
    a.getActionBar().setDisplayHomeAsUpEnabled(true); 
} 
+0

Ok теперь появляется только в FragmentB, но не показывает тосты и дон 't return in FragmentA, когда я нажимаю кнопку «Вверх» – user1608228

+0

@ user1608228 Я думал, вам нужно перейти в FragmentA, если отображается FragmentB. Если отображается FragmentA, вы не хотите навигация, или вы? Тогда вопрос мне неясен. –

+0

Да, мне нужно перейти в FragmentA, если отображается FragmentB, теперь кнопка вверх в порядке, но когда я нажимаю ничего, происходит – user1608228

Смежные вопросы