Android:onOptionsItemSelected不会从Fragment中调用

时间:2014-01-15 12:49:09

标签: android android-fragments android-actionbar actionbarsherlock

我知道已经提出过这个问题,但是所提议的解决方案都不适用于我。

我希望从片段中调用此方法:

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle saveInstanceState) {
        View view = inflater.inflate(R.layout.my_clock_layout, container, false);
        listView = (ListView) view.findViewById(R.id.clock_list);
        listView.setAdapter(new ClockAdapter(this.getActivity()));



        return view; 
    }


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


    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch(item.getItemId()) {
        case R.id.add_alarm:
            Fragment newContent = new AddAlarmFragment();
            if (getActivity() instanceof MenuMainActivity) {
                MenuMainActivity mma = (MenuMainActivity) getActivity();
                mma.switchContent(newContent);
            } 
        }
        return super.onOptionsItemSelected(item);
    }

}   

然后在MenuMainActivity中调用此方法:

@Override   
public boolean onOptionsItemSelected(MenuItem item) {
    switch(item.getItemId()) {
    case android.R.id.home:
        toggle();
        return true;
    case R.id.add_alarm:
        return false;
    }
    return super.onOptionsItemSelected(item);
}

遗憾的是,这不起作用,并且不会调用Fragment方法。

问题可能是什么?

提前致谢!

2 个答案:

答案 0 :(得分:3)

在您的片段onCreate中,请确保您正在呼叫setHasOptionsMenu(true);

编辑请确保您的public boolean onOptionsItemSelected(MenuItem item)实际为public boolean onOptionsItemSelected(com.actionbarsherlock.view.MenuItem item)。或者将import更新为此MenuItem

答案 1 :(得分:1)

所以我发现了自己的错误。我的Activity延长了SherlockFragmentActivity,但片段正在延伸正常Fragment而不是SherlockFragmentFragment扩展SherlockFragment现在可以正常使用。 感谢大家的帮助!