gpt4 book ai didi

android - 无法显示自定义 ActionProvider 的子菜单

转载 作者:行者123 更新时间:2023-11-29 14:50:36 24 4
gpt4 key购买 nike

我创建了一个自定义 ActionProvider,我想用它来显示用于排序的子菜单,在视觉上类似于 ShareActionProvider。操作 View 按预期显示,但单击图标根本不显示子菜单或显示任何视觉反馈(按下状态)。我正在使用支持 v7 库来实现向后兼容操作栏。是否缺少显示菜单的实现?

Action 提供者:

public class SortActionProvider extends ActionProvider implements OnMenuItemClickListener {

private Context mContext;

public SortActionProvider(Context context) {
super(context);
mContext = context;
}

@Override
public View onCreateActionView(){
ImageView imageView = new ImageView(mContext);
imageView.setImageResource(R.drawable.ic_action_sort_by_size);

return imageView;
}

@Override
public boolean hasSubMenu(){
return true;
}

@Override
public void onPrepareSubMenu(SubMenu subMenu){
subMenu.clear();

subMenu.add("Sort by name").setOnMenuItemClickListener(this);
subMenu.add("Sort by type").setOnMenuItemClickListener(this);
}

@Override
public boolean onMenuItemClick(MenuItem item){
Toast.makeText(mContext, "I was clicked!", Toast.LENGTH_SHORT).show();
return true;
}
}

菜单:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:support="http://schemas.android.com/apk/res-auto" >

<item
android:id="@+id/menu_sort"
android:actionProviderClass="com.myapp.provider.SortActionProvider"
android:showAsAction="always"
android:title="@string/sort"
support:actionProviderClass="com.myapp.provider.SortActionProvider"
support:showAsAction="always"/>

</menu>

最佳答案

不幸的是,onPrepareSubMenu() 仅在 onCreateActionView() 返回 null 时被调用。您的解决方案(将 PopupMenu 附加到 ImageView)会起作用,但由于您的 ImageView 显示的是图标,您可能会考虑只设置图标在菜单 XML 中删除 ImageView:

<item android:id="@+id/menu_sort"
android:icon="@drawable/ic_action_sort_by_size"
android:title="@string/sort"
support:actionProviderClass="com.myapp.provider.SortActionProvider"
support:showAsAction="always" />

然后:

@Override
public View onCreateActionView(){
return null;
}

这也应该解决触摸状态没有视觉反馈的问题 - 问题是您的 ImageView 未配置为对触摸状态执行任何操作。

关于android - 无法显示自定义 ActionProvider 的子菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19439106/

24 4 0