另一種實現 Item Click Listener 的方法
實現專案單擊偵聽器的另一種方法是使用具有多個方法的介面,其數量等於可單擊檢視的數量,並使用覆蓋的單擊偵聽器,如下所示。此方法更靈活,因為你可以將單擊偵聽器設定為不同的檢視,並且可以非常輕鬆地分別為每個檢視控制單擊邏輯。
public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.CustomHolder> {
private ArrayList<Object> mObjects;
private ClickInterface mClickInterface;
public interface ClickInterface {
void clickEventOne(Object obj);
void clickEventTwo(Object obj1, Object obj2);
}
public void setClickInterface(ClickInterface clickInterface) {
mClickInterface = clickInterface;
}
public CustomAdapter(){
mList = new ArrayList<>();
}
public void addItems(ArrayList<Object> objects) {
mObjects.clear();
mObjects.addAll(objects);
notifyDataSetChanged();
}
@Override
public CustomHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.list_item, parent, false);
return new CustomHolder(v);
}
@Override
public void onBindViewHolder(CustomHolder holder, int position) {
//make all even positions not clickable
holder.firstClickListener.setClickable(position%2==0);
holder.firstClickListener.setPosition(position);
holder.secondClickListener.setPosition(position);
}
private class FirstClickListener implements View.OnClickListener {
private int mPosition;
private boolean mClickable;
void setPosition(int position) {
mPosition = position;
}
void setClickable(boolean clickable) {
mPosition = position;
}
@Override
public void onClick(View v) {
if(mClickable) {
mClickInterface.clickEventOne(mObjects.get(mPosition));
}
}
}
private class SecondClickListener implements View.OnClickListener {
private int mPosition;
void setPosition(int position) {
mPosition = position;
}
@Override
public void onClick(View v) {
mClickInterface.clickEventTwo(mObjects.get(mPosition), v);
}
}
@Override
public int getItemCount() {
return mObjects.size();
}
protected class CustomHolder extends RecyclerView.ViewHolder {
FirstClickListener firstClickListener;
SecondClickListener secondClickListener;
View v1, v2;
public DialogHolder(View itemView) {
super(itemView);
v1 = itemView.findViewById(R.id.v1);
v2 = itemView.findViewById(R.id.v2);
firstClickListener = new FirstClickListener();
secondClickListener = new SecondClickListener();
v1.setOnClickListener(firstClickListener);
v2.setOnClickListener(secondClickListener);
}
}
}
當你有一個介面卡例項時,你可以設定你的點選監聽器,它監聽點選每個檢視:
customAdapter.setClickInterface(new CustomAdapter.ClickInterface {
@Override
public void clickEventOne(Object obj) {
// Your implementation here
}
@Override
public void clickEventTwo(Object obj1, Object obj2) {
// Your implementation here
}
});