2017-05-26 54 views
0

我想创建一个Instagram风格的ListView。该活动的顶部有一个工具栏,允许用户按下并显示相机。我很满意ToolBar的外观。 ToolBar下面是一个ListView。java.lang.RuntimeException:期待菜单,得到RelativeLayout

布局/ 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); 
    } 

的问题是在布局/ 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?

+0

阅读文档https://developer.android.com/reference/android/view/MenuInflater.html#inflate(int,%20android.view.Menu)它给出了一些事例:“R.menu .main_activity',所以只是菜单。 – njzk2

回答

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 。

相关问题