回收器视图适配器中的选项菜单

时间:2019-01-23 07:43:22

标签: android android-recyclerview recycler-adapter

我想问你如何在适配器回收器视图中的活动中调用方法。

enter image description here

在buildRecyclerView函数中设置了适配器:

private void buildRecyclerView() {
  offerAdapter = new OfferAdapter();
  recyclerView.setAdapter(offerAdapter);
}

在类 OfferAdapter.java 中,为每个项目创建一个子菜单,并使用 onMenuItemClickListener

@Override
public void onBindViewHolder(NoteHolder holder, int position) {
PopupMenu popup = new PopupMenu(mCtx, holder.button);
popup.inflate(R.menu.menu);
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
  // TODO here I want to call delete item in MyOfferFragment.java
}

主要问题:如何从*onMenuItemClickListnere*调用*MyOfferFragment*中的函数。

非常感谢您

2 个答案:

答案 0 :(得分:3)

您可以在通过片段OR活动实现的构造函数中传递一个侦听器对象

/**
     * item click interface of adapter
     */
    public interface OfferAdapterListener {
        void onItemClick(int position)
    }   

此界面因片段而无法使用

/**
     * On item clicked Implement Method from adapter listener.
     *
     * @param position
     */
    @Override
    public void onItemClick(int position) {
        // Here you can call that method 
    }

然后在适配器的构造函数中传递此侦听器。

private void buildRecyclerView() {
  offerAdapter = new OfferAdapter(this);
  recyclerView.setAdapter(offerAdapter);
}

在构造函数中,您可以这样分配

 private OfferAdapterListener mOfferAdapterListener;
 public OfferAdapter(OfferAdapterListener mOfferAdapterListener) {
        this.mOfferAdapterListener = mOfferAdapterListener
        }
    }

现在,您可以通过在任何这样的Viwe上设置点击监听器来使用此监听器

holder.button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                mOfferAdapterListener.onItemClick(position);
            }
        });

它返回调用实现该方法的onItemClick方法。

OR

您可以像上面那样在构造函数中传递活动或片段上下文,并通过这样的引用对其进行调用

((MainActivity) mActivity).methodName(arguments);

这里是mActivity参考上下文,您可以在构造函数中通过该参考上下文。

答案 1 :(得分:1)

您可以将MyOfferFragment添加到适配器构造器中。

private void buildRecyclerView() {
  offerAdapter = new OfferAdapter(this); // Adding fragment to constructor
  recyclerView.setAdapter(offerAdapter);
}

OfferAdapter.java中:

private MyOfferFragment mFragment; // field variable
OfferAdapter (MyOfferFragment fragment){
  mFragment = fragment;
}

然后您可以通过MyOfferFragment访问mFragment方法:

  mFragment.deleteItem();

但是,我认为如果可能的话,将与RecyclerView相关的方法仅移入适配器是一种更传统的方法。如果要从RecyclerView删除项目,可以参考此内容:Android RecyclerView addition & removal of items