我正在开发一个应用程序,其中我想显示一个自定义菜单项,显示计数和休息菜单项是默认类型的项目,如下图所示。
我的menu.xml代码如下:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:myapp="http://schemas.android.com/apk/res-auto" >
<item
android:id="@+id/menu_1"
android:icon="@drawable/icon_1"
android:orderInCategory="101"
android:title="@string/option_1"
myapp:showAsAction="always"/>
<item
android:id="@+id/menu_2"
android:icon="@drawable/icon_2"
android:orderInCategory="102"
android:title="@string/option_2"
myapp:showAsAction="always"/>
<item
android:id="@+id/menu_3"
android:icon="@drawable/icon_3"
android:orderInCategory="103"
android:title="@string/option_3"
myapp:showAsAction="always"/>
<item
android:id="@+id/menu_4"
android:icon="@drawable/icon_4"
android:orderInCategory="104"
android:title="@string/option_4"
myapp:showAsAction="always"/>
<item
android:id="@+id/menu_5"
android:orderInCategory="105"
android:title="@string/option_5"
myapp:showAsAction="never"
android:actionLayout="@layout/actionbar_badge_layout" />
</menu>
我的actionbar_badge_layout.xml代码是:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="right"
android:id="@+id/actionbar_badge_layout" >
<TextView
android:id="@+id/actionbar_notifcation_textview"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:clickable="true"
android:padding="10dp"
android:text="@string/option_1"
android:textColor="@android:color/black"
android:layout_toLeftOf="@+id/actionbar_notifcation_count_textview"/>
<TextView
android:id="@+id/actionbar_notifcation_count_textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:padding="10dp"
android:text="99"
android:textColor="@android:color/white"
android:background="@drawable/badge_circle" />
</RelativeLayout>
在我的片段中,我所做的是:
@Override
public View onCreateView(LayoutInflater inflater,ViewGroup container, Bundle savedInstanceState) {
View view=inflater.inflate(R.layout.fragment_myfragment, container,false);
setHasOptionsMenu(true);
((SlidingBaseActivity) getActivity()).setActionBarTitle("My Fragment");
((SlidingBaseActivity) getActivity()).keepMenuClosed(false);
((SlidingBaseActivity) getActivity()).makeActionOverflowMenuShown();
initView(view);
dialog = Helper.showPleaseWaitDialog(getActivity());
getdata();
return view;
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
menu.findItem(R.id.option_1).setVisible(true);
menu.findItem(R.id.option_1).setOnMenuItemClickListener(this);
menu.findItem(R.id.option_2).setVisible(true);
menu.findItem(R.id.option_2).setOnMenuItemClickListener(this);
menu.findItem(R.id.option_3).setVisible(true);
menu.findItem(R.id.option_3).setOnMenuItemClickListener(this);
menu.findItem(R.id.option_4).setVisible(true);
menu.findItem(R.id.option_4).setOnMenuItemClickListener(this);
menu.findItem(R.id.option_5).setVisible(true);
menu.findItem(R.id.option_5).setOnMenuItemClickListener(this);
RelativeLayout badgeLayout = (RelativeLayout) menu.findItem(R.id.option_5).getActionView();
TextView textViewMenuText = (TextView) badgeLayout.findViewById(R.id.actionbar_notifcation_textview);
textViewMenuText.setText("Notification ");
TextView textViewCount = (TextView) badgeLayout.findViewById(R.id.actionbar_notifcation_count_textview);
textViewCount.setText("99");
super.onCreateOptionsMenu(menu, inflater);
}
但是当我导航到相应的片段时,我得到空指针异常。 我按照this link.
的最高投票回答我错过了什么或做错了什么?请指导我。
答案 0 :(得分:1)
在你的onCreateOptionsMenu中,你正在尝试这个:
RelativeLayout badgeLayout = (RelativeLayout) menu.findItem(R.id.option_5).getActionView();
此处的项目“id
”错误。您已将ID设置为“menu_5
”并尝试使用“option_5
”进行抓取。我看到的只是菜单项的“title
”。