如何获取和填充通过自定义布局创建的菜单项?

时间:2017-10-12 13:50:26

标签: android layout menu

我一直在尝试将图片加载到一个菜单项中,该菜单项是通过自定义布局创建的,并且已经检查了官方文档以及这些帖子,例如Custom view for Menu Item但是..

这是我onCreateOptionsMenu ond OnPrepareOptionsMenu

  @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        final MenuItem alertMenuItem = menu.findItem(R.id.action_my_personal);
        FrameLayout rootView = (FrameLayout) alertMenuItem.getActionView();

        redCircle = (FrameLayout) rootView.findViewById(R.id.view_alert_red_circle);
        countTextView = (TextView) rootView.findViewById(R.id.view_alert_count_textview);
        ImageView hc_image_menu_inflated = (ImageView) rootView.findViewById(R.id.hc_image_menu);

        rootView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onOptionsItemSelected(alertMenuItem);
            }
        });


        if (menu.findItem(R.id.hc_image_menu) != null) {
            loadMenuIcon(menu.findItem(R.id.hc_image_menu), my_image_url);
        }

        return super.onPrepareOptionsMenu(menu);
    }

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.toolbar_menu_main, menu);

        return true;
    }

正如您所看到的,我添加了这些行以避免应用程序崩溃,因为menu.finditem(R.id.hc_image_menu)返回null并且问题出在那里,因为我想填充具有id hc_image_menu 但是尽管做了这么多次尝试但是没有成功

 if (menu.findItem(R.id.hc_image_menu) != null) {
        loadMenuIcon(menu.findItem(R.id.hc_image_menu), my_image_url);
    }

我的 toolbar_main_menu 布局的代码是:

<item
        android:id="@+id/action_my_personal"
        app:actionLayout="@layout/toolbar_menu_hc"
        android:orderInCategory="100"
        android:title="My Personal Trainer"
        app:showAsAction="always" />

我的自定义布局( toolbar_hc_menu )就是这个:

<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="48dp"
android:layout_height="32dp"
android:layout_gravity="center">


<ImageView
    android:id="@+id/hc_image_menu"
    android:layout_marginRight="8dp"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:src="@drawable/gavin"/>

<FrameLayout
    android:id="@+id/view_alert_red_circle"
    android:layout_width="14dp"
    android:layout_height="14dp"
    android:layout_gravity="top|end"
    android:background="@drawable/date_circle"
    android:visibility="gone"
    tools:visibility="visible">

    <TextView
        android:id="@+id/view_alert_count_textview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:textColor="@color/white"
        android:textSize="10sp"
        tools:text="3"/>

</FrameLayout>

非常感谢你提供任何帮助。真的很感激!! :)

1 个答案:

答案 0 :(得分:1)

问题已修复。 :) 最后,我必须在获得alertMenuItem之后将图像加载到ImageView中。

if (my_image_url!= null) {
        Picasso.with(getApplicationContext()).load(my_image_url).into(hc_image_menu_inflated);
    }