0

选择该项目时,我有一个列表视图和呼叫详细信息活动。我的 onCreateOptionsMenu 在操作栏中显示菜单时出错。

public boolean onCreateOptionsMenu(Menu menu) {
     new MenuInflater(getActivity()).inflate(R.menu.detail_view_menu, menu);
     return (super.onCreateOptionsMenu(menu));
 }

错误是 Fragment 类型中的 onCreateOptionsMenu(Menu, MenuInflater) 方法不适用于参数 (Menu)。返回线路发生错误。我使用 fragmentTransaction 实现列表视图和详细信息活动。谢谢

4

2 回答 2

0

像这样尝试,但把它放在你的主 Activity 类中:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.detail_view_menu, menu);
    return true;
}

或者,如果您希望 Fragment 向 ActionBar 添加项目,则必须使用稍微不同的构造:

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

您必须添加一个附加参数(MenuInflater)。此外,在 Fragment 中,onCreateOptionsMenu 不返回布尔值。

现在您有了充气机,您需要调用setHasOptionsMenu(true)Fragment 的onCreate()方法。否则您的项目将不会显示在 ActionBar 中。

您的片段代码,处理菜单通货膨胀,现在应该是这样的:

public class DetailFragment extends Fragment {

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

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
       super.onCreateOptionsMenu(menu, inflater);
       inflater.inflate(R.menu.detail_view_menu, menu);
    }
}
于 2013-03-24T03:29:15.677 回答
0

您的 onCreateOptionsMenu(Menu menu) 只需要在托管片段的活动中,而不是在片段本身中。

您还可以考虑扩展 BaseActivity 并将其包含在其中一次。

public class BaseActivity extends Activity {

    public boolean onCreateOptionsMenu(Menu menu) {
        new MenuInflater(getActivity()).inflate(R.menu.detail_view_menu, menu);
        return (super.onCreateOptionsMenu(menu));
    }

}

public class ListActivity extends BaseActivity {
    // ...
}

public class DetailActivity extends BaseActivity {
    // ...
}
于 2013-03-24T03:17:53.207 回答