【问题标题】:call onCreateOptionsMenu from listview adapter class in android [closed]从android中的listview适配器类调用onCreateOptionsMenu [关闭]
【发布时间】:2016-06-07 07:44:11
【问题描述】:

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

【问题讨论】:

标签: android listview fragment adapter


【解决方案1】:

最简单的方法是在您的Activity 上调用invalidateOptionsMenu()。因此,如果您可以从您的 adapter 访问 Activity,只需这样做,一切都会正常工作。

编辑:

如果您无法从adapter 访问Activity,请创建一个。 例如,将 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();
    }
}

如果您在Fragment 中创建adapter:

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

或者如果你创建adapter in aActivity`:

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

【讨论】:

  • 我无法从片段访问 Activity 调用适配器。
  • 我想开发像杂货店应用程序这样的应用程序。带有导航抽屉,点击导航项目列表视图显示,我可以在其中添加产品或从购物车中删除产品。
  • 你的确切情况似乎过于宽泛的问题,所以我会从你的标题中提出问题(因为看起来你肯定朝着正确的方向前进)。
  • 哦。刚刚意识到您使用的是ListView 而不是RecyclerView。无论如何,方法应该完全相同。
猜你喜欢
  • 1970-01-01
  • 2019-09-09
  • 1970-01-01
  • 1970-01-01
  • 2015-11-28
  • 1970-01-01
  • 1970-01-01
  • 2018-02-10
  • 1970-01-01
相关资源
最近更新 更多