【问题标题】:Android: Custom option menuAndroid:自定义选项菜单
【发布时间】:2016-12-08 06:51:23
【问题描述】:

我正在开发一个应用程序,我想在其中显示一个自定义菜单项,其中显示计数和剩余菜单项是默认类型的项目,如下图所示。

我的 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.的最大投票答案

我错过了什么或做错了什么?请指导我。

【问题讨论】:

    标签: android android-actionbar android-custom-view android-optionsmenu


    【解决方案1】:

    在你的 onCreateOptionsMenu 中你正在尝试这个:

    RelativeLayout badgeLayout = (RelativeLayout) menu.findItem(R.id.option_5).getActionView();
    

    这里的项目的“id”是错误的。您已将 id 设置为“menu_5”并尝试使用“option_5”获取。我看到的正是您在菜单项中的“title”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-24
      • 2012-09-16
      相关资源
      最近更新 更多