java.lang.RuntimeException:期待菜单,得到RelativeLayout

时间:2017-05-26 21:36:51

标签: android android-layout listview

我正在尝试创建一个Instagram风格的ListView。活动顶部有一个工具栏,允许用户按下并显示摄像头。我很满意ToolBar的外观。在ToolBar下面是一个ListView。

布局/ main_activity.xml

<android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="@color/white">
  ...      
</android.support.v7.widget.Toolbar>

    <ListView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/toolbar"
        android:layout_centerHorizontal="true" 
        android:id="@+id/listView" />

MainActivity.java

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    getSupportActionBar().setDisplayShowTitleEnabled(false);

我为ListView创建了一个自定义适配器。

    listView = (ListView) findViewById(R.id.listView);
    items = new ArrayList<Item>();
    ItemAdapter = new ItemAdapter(this, 0, items);
    listView.setAdapter(ItemAdapter);

在ItemAdapter类中,我指定每个ListView项的布局:

public View getView(int position, View convertView, ViewGroup parent) {
    Item item = getItem(position);
    if (convertView == null) {
        convertView = LayoutInflater.from(getContext()).inflate(R.layout.item_list, parent, false);
    }

问题出在layouts / item_list.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent">
    <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent" android:layout_alignParentTop="true"
            android:layout_toRightOf="@+id/photo" android:layout_toEndOf="@+id/photo">

        <ImageView
                android:id="@+id/usericon"
                android:layout_height="wrap_content"
                android:layout_width="wrap_content" />
        <TextView
                android:id="@+id/username"
                android:layout_height="wrap_content"
                android:layout_width="wrap_content" />

        <ImageButton
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/ic_more_vert_black_24dp"
                android:contentDescription="@string/descr_overflow_button"
                android:id="@+id/overflow_menu" />
    </LinearLayout>
    <ImageView
            android:id="@+id/photo"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/toolbar"/>
</RelativeLayout>

当我在我的活动中执行此操作时:

    overflowMenu = (ImageView) findViewById(R.id.overflow_menu);
    PopupMenu popup = new PopupMenu(this, overflowMenu);
    MenuInflater inflater = popup.getMenuInflater();
    inflater.inflate(R.layout.item_loop, popup.getMenu());  

我应该如何在layouts / item_list.xml中显示PopupMenu?

1 个答案:

答案 0 :(得分:0)

好的我明白了。充气机要求您始终从R.menu资源中提取。所以我在菜单/文件夹中创建了一个菜单资源,然后夸大了:

inflater.inflate(R.layout.item_menu_list, popup.getMenu());  

菜单/ item_menu_list.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="schemas.android.com/apk/res-auto"
      xmlns:tools="http://schemas.android.com/tools" tools:context=".MainActivity">
    <item android:id="@+id/report" android:title="Report"
          app:showAsAction="always"/>
    <item android:id="@+id/share" android:title="Share"
          app:showAsAction="always"/>
</menu>

这些菜单项应添加到您转为弹出菜单的ImageView中。