如何从片段中收听Actionbarsherlok菜单项?

时间:2013-07-30 15:12:42

标签: android actionbarsherlock

我有一个主要活动我正在使用actionbarsherlok,其中有一个菜单项,

  public boolean onCreateOptionsMenu(Menu menu) {
        // Used to put dark icons on light action bar


        menu.add("Refresh")
        .setOnMenuItemClickListener(new OnMenuItemClickListener() {

            public boolean onMenuItemClick(MenuItem item) {
                // TODO Auto-generated method stub

                          return false;
            }
        }).setIcon(R.drawable.ic_refresh)
        .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);

              return true;
    }

我有一个附加到此活动的片段。我想要的是从主要活动中听菜单项点击。当点击动作栏菜单项时,我想在片段中做一些事情。任何帮助,将不胜感激。提前谢谢..

2 个答案:

答案 0 :(得分:3)

首先,id建议在menu.xml文件中创建菜单,然后在onCreateOptionsMenu上对其进行充气。 但无论如何,在你的sherlockFragmentActivity中,在onCreateOptionsMenu中为你的菜单项指定一个id

menu.add(0, REFRESH_ID, 0, "Refresh").setIcon(R.drawable.ic_refresh)
    .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);

然后覆盖onOptionsItemSelected并返回false(表示将其传递给片段)

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case REFRESH_ID:
            return false;
    }
    return super.onOptionsItemSelected(item);
}

然后在你的sherlockfragment类中调用onCreateOptionsMenu和onOptionsItemSelected,但这次返回true告诉系统菜单项已被处理。

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // TODO Auto-generated method stub
    switch (item.getItemId()) {
        case REFRESH_ID:
            refresh();
            return true;
    }
    return super.onOptionsItemSelected(item);
}

答案 1 :(得分:2)

您的片段类应该扩展SherlockFragment类而不是Fragment,然后您可以覆盖onCreateOptionsMenu(Menu menu, MenuInflater inflater);