我想问你如何在适配器回收器视图中的活动中调用方法。
在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*
中的函数。
非常感谢您
答案 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