1

ActionProviderに視覚的に似た、並べ替え用のサブメニューを表示するために使用するカスタムを作成しましたShareActionProvider。アクション ビューは期待どおりに表示されますが、アイコンをクリックしてもサブメニューが表示されず、視覚的なフィードバック (押された状態) もまったく表示されません。下位互換性アクション バーのサポート v7 ライブラリを使用しています。メニューを表示するために欠けている実装はありますか?

アクションプロバイダー:

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>
4

2 に答える 2

2

アクション ビューをクリックしてもサブメニューが表示されActionProviderません。サブメニューがどのような条件で表示されるのか、実際にはわかりません。私がしなければならなかったのはPopupMenu、アクションビューに a を添付することでした:

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

    final PopupMenu menu = new PopupMenu(mContext, imageView);
    menu.inflate(R.menu.sort_options_menu);
    menu.setOnMenuItemClickListener(this);

    imageView.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v){
            menu.show();
        }
    });

    return imageView;
}
于 2013-10-18T16:15:41.083 に答える