2015-03-19 3 views
2

У меня есть фрагмент с включенной кнопкой возврата панели действий.Action Bar обнаружить кнопку с обратной связью по фрагменту

Код:

@Override 
    public void onAttach(Activity activity) { 
     super.onAttach(activity); 
     setHasOptionsMenu(true); 
     actionBar = ((MainActivity)getActivity()).getSupportActionBar(); 
     actionBar.setDisplayHomeAsUpEnabled(true); 

     actionBar.setCustomView(R.layout.custom_action_bar); 
     actionBar.setDisplayShowTitleEnabled(false); 
     actionBar.setDisplayShowCustomEnabled(true); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     mInflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View view = mInflater.inflate(R.layout.fragment_layout, container, false); 

     return view; 
    } 

В приведенном выше коде actionBar.setDisplayHomeAsUpEnabled(true); позволяет кнопку назад в панели действий, но как мы можем обнаружить щелчок на нем?

Я посмотрел на много примеров и попытался ниже, но по-прежнему не работает:

В Fragment:

@Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
     case android.R.id.home: 
      Toast.makeText(getActivity(), "Back", Toast.LENGTH_LONG).show(); 
      break; 
     default: 
      break; 
     } 
     return super.onOptionsItemSelected(item); 
    } 

Кроме того, кнопка назад, которая отображается в фрагменте черного цвета мне нужно, что в белом цвете или с пользовательским цветом, как я могу это изменить?

+0

onOptionSelectde (элемент MenuItem) даже для элемента меню, а также с действиемBar.setDisplayHomeAsUpEnabled (true). Он автоматически возвращает объект. Dont перебирает событие click. – Vidhi

+0

@VidhiTrivedi Когда я нажимаю на него, он ничего не делает, так что будет моим следующим шагом, чтобы проверить, что я делаю неправильно? – user2056563

+0

i m также сталкивается с такой же проблемой, что и любой найденный зол для этого? не удалось обнаружить событие android.R.id.home – Swapnil

ответ

0
View cView = getLayoutInflater().inflate(R.layout.header, null); 
cView.findViewById(R.id.btn_id).setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
        // Do stuff here. 
    } 
}); 
actionBar.setCustomView(cView); 
2

Я столкнулся с той же проблемой, но потом я положил этот код в деятельности и кнопка назад работала внутри фрагмента:

@Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
     case android.R.id.home: 
      Toast.makeText(getActivity(), "Back", Toast.LENGTH_LONG).show(); 
      break; 
     default: 
      break; 
     } 
     return super.onOptionsItemSelected(item); 
    } 
1

Лучше поздно, чем никогда, пожалуйста, попробуйте это>

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     mInflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View view = mInflater.inflate(R.layout.fragment_layout, container, false); 
     //set setHasOptionsMenu on true here on CreateView method 
     setHasOptionsMenu(true); 
     return view; 
    } 

и осуществлять

@Override 
public boolean onOptionsItemSelected(MenuItem item){ 
      if (item.getItemId() == android.R.id.home) { 
       if (getActivity() != null) { 
        getActivity().onBackPressed(); 
       } 
       return true; 
      }; 
      return super.onOptionsItemSelected(item); 
}