从android中的listview适配器类调用onCreateOptionsMenu

时间:2016-06-07 07:44:12

标签: android listview fragment adapter

我想在点击适配器类中的列表视图按钮时更新操作栏中的购物车。就像杂货店购物应用程序一样。

1 个答案:

答案 0 :(得分:1)

最简单的方法是拨打invalidateOptionsMenu()上的Activity。因此,如果您可以访问Activity中的adapter,只需这样做,一切都应该正常。

编辑:

如果您无权访问Activity中的adapter,请创建一个。 例如,Listener传递给adapter构造函数。

ExampleAdapter(只是必要部分,可能没有所需的方法,请自行完成):

public class ExampleAdapter extends RecyclerView.Adapter<ExampleAdapter.ExampleViewHolder> {

    private Listener listener;

    public ExampleAdapter(Listener listener) {
        this.listener = listener;
    }

    // other needed methods

    @Override
    public void onBindViewHolder(ExampleAdapter.ExampleViewHolder holder, int position) {
        holder.button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (listener != null) {
                    listener.onOptionsMenuChangeRequested();
                }
            }
        });
        //some other stuff
    }

    public static class ExampleViewHolder extends RecyclerView.ViewHolder {

        public Button button;

        public ExampleViewHolder(View itemView) {
            super(itemView);
            // initialize the button
        }
    }

    public interface Listener {
        void onOptionsMenuChangeRequested();
    }
}

如果您在adapter中创建Fragment

ExampleAdapter adapter = new ExampleAdapter(new ExampleAdapter.Listener() {
    @Override
    public void onOptionsMenuChangeRequested() {
        if (getActivity() != null){
            getActivity().invalidateOptionsMenu();
        }
    }
});

或者,如果您创建adapter in a活动:

ExampleAdapter adapter = new ExampleAdapter(new ExampleAdapter.Listener() {
    @Override
    public void onOptionsMenuChangeRequested() {
        invalidateOptionsMenu();
    }
});