2015-03-19 68 views
2

我有一个片段,其中启用了操作栏后退按钮。操作栏检测后退按钮单击片段

代码:

@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);使操作栏后退按钮,但我们如何可以检测它的点击?

我已经调查的例子很多,并试图以下,但仍然没有工作:

在片段:

@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项)是甚至菜单项,并与actionBar.setDisplayHomeAsUpEnabled(true),它会自动返回设施..不经过其点击事件.... – Vidhi 2015-03-19 06:49:07

+0

@VidhiTrivedi当我点击它,它什么也没做,那么我的下一步是检查我做错了什么? – user2056563 2015-03-19 06:52:00

+0

我也面临同样的问题任何人找到解决这个?无法检测到android.R.id.home事件 – Swapnil 2015-06-10 08:00:32

回答

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); 
}