Android 项目内部视图的FastAdapter单击侦听器

Android 项目内部视图的FastAdapter单击侦听器,android,android-recyclerview,fastadapter,Android,Android Recyclerview,Fastadapter,我正在尝试为我的CardView中的按钮实现一个单击侦听器。当我按下此按钮时,该项目将被删除。但是我找不到一个方法来实现它。FastAdapter文档在Kotlin中,因此没有Java示例 通常,这是在onBindView中完成的,但对于FastAdapter,方法不同。这是我的模型(请买家) Model.java 导入android.util.Log; 导入android.view.view; 导入android.widget.Button; 导入android.widget.TextVie

我正在尝试为我的CardView中的按钮实现一个单击侦听器。当我按下此按钮时,该项目将被删除。但是我找不到一个方法来实现它。FastAdapter文档在Kotlin中,因此没有Java示例

通常,这是在onBindView中完成的,但对于FastAdapter,方法不同。这是我的模型(请买家)

Model.java


导入android.util.Log;
导入android.view.view;
导入android.widget.Button;
导入android.widget.TextView;
导入androidx.annotation.NonNull;
导入androidx.recyclerview.widget.recyclerview;
导入com.google.gson.annotations.SerializedName;
进口com.kazi.amarhut.R;
导入com.mikepenz.fastadapter.commons.adapters.fastemAdapter;
导入com.mikepenz.fastadapter.items.AbstractItem;
导入com.mikepenz.fastadapter.listeners.OnClickListener;
导入java.util.List;
公共类RequestBuyer扩展了AbstractItem{
@序列化名称(“cropAmount”)
私人双克罗帕蒙特;
@序列化名称(“买方电话”)
私人串电话;
@序列化名称(“作物”)
私人双季稻;
@SerializedName(“sellerPhone”)
私人串电话;
@序列化名称(“_v”)
私人INTV;
@序列化名称(“cropName”)
私有字符串cropName;
@SerializedName(“\u id”)
私有字符串id;
@序列化名称(“已发布”)
私人字符串posted;
@SerializedName(“交货日期”)
私有字符串deliveryDate;
@序列化名称(“状态”)
私有字符串状态;
FastItemAdapter FastItemAdapter=新建FastItemAdapter();
公共无效设置cropAmount(内部cropAmount){
this.cropAmount=cropAmount;
}
公共双getCropAmount(){
返回克罗帕蒙特;
}
公共用户电话(字符串用户电话){
this.buyerPhone=buyerPhone;
}
公共字符串getBuyerPhone(){
返回买方电话;
}
公共作物价格(国际作物价格){
this.croprice=croprice;
}
公共双季稻(){
复种水稻;
}
公用电话(字符串电话){
this.sellerPhone=sellerPhone;
}
公共字符串getSellerPhone(){
返回电话;
}
公共无效setV(int V){
这个,V=V;
}
公共int getV(){
返回V;
}
public void setCropName(字符串cropName){
this.cropName=cropName;
}
公共字符串getCropName(){
返回cropName;
}
公共无效集合id(字符串id){
this.id=id;
}
公共字符串getId(){
返回id;
}
公共void setPostID(字符串postID){
this.postID=postID;
}
公共字符串getPostID(){
回帖;
}
public void setDeliveryDate(字符串deliveryDate){
this.deliveryDate=deliveryDate;
}
公共字符串getDeliveryDate(){
退货日期;
}
公共无效设置状态(字符串状态){
这个状态=状态;
}
公共字符串getStatus(){
返回状态;
}
@凌驾
公共字符串toString(){
回来
“响应{”+
“cropAmount=”+cropAmount+“\”+
“,buyerPhone='”+buyerPhone+'\''+
“,croprice=”+croprice+“\”+
“,sellerPhone='”+sellerPhone+'\''+
“,”v=“+v+”\”+
“,cropName='”+cropName+'\''+
“,\u id=”“+id+”\”+
“,postID='”+postID+'\'”+
,deliveryDate='“+deliveryDate+'\'”+
,状态=“+”状态+“\”+
"}";
}
@凌驾
公共int getLayoutRes(){
返回R.layout.activity\u request\u cardwiew;
}
@凌驾
公共int getType(){
返回R.id.activity\u request\u卡;
}
@凌驾
public void bindView(final RequestBuyer.ViewHolder,列出有效载荷){
超级bindView(支架、有效载荷);
holder.tvCropName.setText(cropName);
holder.tvcroprice.setText(String.valueOf(croprice)+“tk/kg”);
holder.tvCropAmount.setText(String.valueOf(cropAmount)+“kg”);
字符串rawDate=deliveryDate;
int index=rawDate.indexOf(“T”);
字符串日期=rawDate.substring(0,索引);
holder.tvDeliveryDate.setText(“交付日期:+日期”);
holder.tvbuerphone.setText(“买方:+buyerPhone”);
holder.tvSellerPhone.setText(“卖方:+sellerPhone”);
holder.tvReqStatus.setText(“状态:+状态”);
holder.btnReqAccept.setVisibility(View.GONE);
holder.btnReqReject.setText(“删除”);
holder.btnReqReject.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
}
});
}
//在此处重置视图(这是可选方法,但建议使用)
@凌驾
公共无效解除绑定视图(RequestBuyer.ViewHolder){
超级无绑定视图(持有者);
}
@非空
@凌驾
public RequestBuyer.ViewHolder getViewHolder(视图v){
返回新的RequestBuyer.ViewHolder(v);
}
公共静态类ViewHolder扩展了RecyclerView.ViewHolder{
TextView tvCropName、tVcroparice、tvCropAmount、tvDeliveryDate、tvReqStatus、tvBuyerPhone、tvSellerPhone;
按钮btnReqAccept,btnReqReject;
公共视图持有者(视图项视图){
超级(项目视图);
tvCropAmount=itemView.findViewById(R.id.activity\u request\u cardview\u tv\u cropAmount);
TVcraprice=itemView.findViewById(R.id.activity\U request\U cardview\U tv\U craprice);
tvCropName=itemView.findViewById(R.id.activity\u request\u cardview\u tv\u cropName);
tvDeliveryDate=itemView.findViewById(R.id.activity\U request\U cardview\U tv\U cropDeliveryDate);


import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import com.google.gson.annotations.SerializedName;
import com.kazi.amarhut.R;
import com.mikepenz.fastadapter.commons.adapters.FastItemAdapter;
import com.mikepenz.fastadapter.items.AbstractItem;
import com.mikepenz.fastadapter.listeners.OnClickListener;

import java.util.List;

public class RequestBuyer extends AbstractItem<RequestBuyer, RequestBuyer.ViewHolder> {

    @SerializedName("cropAmount")
    private double cropAmount;

    @SerializedName("buyerPhone")
    private String buyerPhone;

    @SerializedName("cropPrice")
    private double cropPrice;

    @SerializedName("sellerPhone")
    private String sellerPhone;

    @SerializedName("__v")
    private int V;

    @SerializedName("cropName")
    private String cropName;

    @SerializedName("_id")
    private String id;

    @SerializedName("postID")
    private String postID;

    @SerializedName("deliveryDate")
    private String deliveryDate;

    @SerializedName("status")
    private String status;

    FastItemAdapter<RequestBuyer> fastItemAdapter = new FastItemAdapter<>();

    public void setCropAmount(int cropAmount){
        this.cropAmount = cropAmount;
    }

    public double getCropAmount(){
        return cropAmount;
    }

    public void setBuyerPhone(String buyerPhone){
        this.buyerPhone = buyerPhone;
    }

    public String getBuyerPhone(){
        return buyerPhone;
    }

    public void setCropPrice(int cropPrice){
        this.cropPrice = cropPrice;
    }

    public double getCropPrice(){
        return cropPrice;
    }

    public void setSellerPhone(String sellerPhone){
        this.sellerPhone = sellerPhone;
    }

    public String getSellerPhone(){
        return sellerPhone;
    }

    public void setV(int V){
        this.V = V;
    }

    public int getV(){
        return V;
    }

    public void setCropName(String cropName){
        this.cropName = cropName;
    }

    public String getCropName(){
        return cropName;
    }

    public void setId(String id){
        this.id = id;
    }

    public String getId(){
        return id;
    }

    public void setPostID(String postID){
        this.postID = postID;
    }

    public String getPostID(){
        return postID;
    }

    public void setDeliveryDate(String deliveryDate){
        this.deliveryDate = deliveryDate;
    }

    public String getDeliveryDate(){
        return deliveryDate;
    }

    public void setStatus(String status){
        this.status = status;
    }

    public String getStatus(){
        return status;
    }

    @Override
    public String toString(){
        return
                "Response{" +
                        "cropAmount = '" + cropAmount + '\'' +
                        ",buyerPhone = '" + buyerPhone + '\'' +
                        ",cropPrice = '" + cropPrice + '\'' +
                        ",sellerPhone = '" + sellerPhone + '\'' +
                        ",__v = '" + V + '\'' +
                        ",cropName = '" + cropName + '\'' +
                        ",_id = '" + id + '\'' +
                        ",postID = '" + postID + '\'' +
                        ",deliveryDate = '" + deliveryDate + '\'' +
                        ",status = '" + status + '\'' +
                        "}";
    }

    @Override
    public int getLayoutRes() {
        return R.layout.activity_request_cardview;
    }

    @Override
    public int getType() {
        return R.id.activity_request_card;
    }

    @Override
    public void bindView(final RequestBuyer.ViewHolder holder, List payloads) {
        super.bindView(holder,payloads);

        holder.tvCropName.setText(cropName);
        holder.tvCropPrice.setText(String.valueOf(cropPrice) + " tk/kg");
        holder.tvCropAmount.setText(String.valueOf(cropAmount) + " kg");

        String rawDate = deliveryDate;
        int index = rawDate.indexOf("T");
        String date = rawDate.substring(0,index);
        holder.tvDeliveryDate.setText("Delivery Date: " + date);

        holder.tvBuyerPhone.setText("Buyer : "+ buyerPhone);
        holder.tvSellerPhone.setText("Seller : "+ sellerPhone);

        holder.tvReqStatus.setText("Status : " + status);

        holder.btnReqAccept.setVisibility(View.GONE);

        holder.btnReqReject.setText("Delete");

        holder.btnReqReject.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

            }
        });
    }

    //Reset the view here (this is an optional method, but recommended)
    @Override
    public void unbindView(RequestBuyer.ViewHolder holder) {
        super.unbindView(holder);

    }

    @NonNull
    @Override
    public RequestBuyer.ViewHolder getViewHolder(View v) {
        return new RequestBuyer.ViewHolder(v);
    }

    public  static class ViewHolder extends RecyclerView.ViewHolder {

        TextView tvCropName,tvCropPrice,tvCropAmount,tvDeliveryDate,tvReqStatus, tvBuyerPhone, tvSellerPhone;

        Button btnReqAccept, btnReqReject;

        public ViewHolder(View itemView) {
            super(itemView);

            tvCropAmount = itemView.findViewById(R.id.activity_request_cardview_tv_cropAmount);
            tvCropPrice = itemView.findViewById(R.id.activity_request_cardview_tv_cropPrice);
            tvCropName = itemView.findViewById(R.id.activity_request_cardview_tv_cropName);
            tvDeliveryDate = itemView.findViewById(R.id.activity_request_cardview_tv_cropDeliveryDate);
            tvReqStatus = itemView.findViewById(R.id.activity_request_cardview_tv_reqStatus);
            tvBuyerPhone = itemView.findViewById(R.id.activity_request_cardview_tv_buyerPhone);
            tvSellerPhone = itemView.findViewById(R.id.activity_request_cardview_tv_sellerPhone);

            btnReqAccept = itemView.findViewById(R.id.activity_request_cardview_btn_reqAccept);

            btnReqReject = itemView.findViewById(R.id.activity_request_cardview_btn_reqReject);

        }
    }
}
package com.kazi.amarhut.CoreActivities.Buyer;

import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import com.androidnetworking.AndroidNetworking;
import com.androidnetworking.common.Priority;
import com.androidnetworking.error.ANError;
import com.androidnetworking.interfaces.JSONArrayRequestListener;
import com.google.gson.Gson;
import com.kazi.amarhut.Models.RequestBuyer;
import com.kazi.amarhut.Models.RequestFarmer;
import com.kazi.amarhut.R;
import com.kazi.amarhut.Utils.ClickListenerHelper;
import com.kazi.amarhut.Utils.PrefManager;
import com.mikepenz.fastadapter.FastAdapter;
import com.mikepenz.fastadapter.IItem;
import com.mikepenz.fastadapter.commons.adapters.FastItemAdapter;
import com.mikepenz.fastadapter.listeners.ClickEventHook;
import com.mikepenz.fastadapter.listeners.EventHook;
import com.mikepenz.fastadapter.listeners.OnCreateViewHolderListener;

import org.json.JSONArray;
import org.json.JSONException;

import java.util.ArrayList;
import java.util.List;

public class RequestActivityBuyer extends Fragment {

    FastItemAdapter<RequestBuyer>fastAdapter;
    RecyclerView recyclerView;
    List<RequestBuyer> requestBuyerList = new ArrayList<>();

    ClickListenerHelper<RequestBuyer> clickListenerHelper;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.activity_buyer_request,container,false);
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        jsonRequest();
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        recyclerView = view.findViewById(R.id.activity_buyer_request_recyclerView);

        setuprecyclerview();
    }


    private void jsonRequest() {

        String buyerPhone = new PrefManager(getContext()).getUserInfo().get("phone");

        AndroidNetworking.get("https://obscure-stream-72200.herokuapp.com/api/requests/findBy/buyerPhone/"+buyerPhone)
                .setPriority(Priority.MEDIUM)
                .build()
                .getAsJSONArray(new JSONArrayRequestListener() {
                    @Override
                    public void onResponse(JSONArray response) {
                        // do anything with response

                        Gson gson = new Gson();
                        RequestBuyer requestBuyerObject;

                        for (int i = 0; i < response.length(); i++) {
                            try {

                                requestBuyerObject = gson.fromJson(response.get(i).toString(), RequestBuyer.class);
                                requestBuyerList.add(requestBuyerObject);

                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
                        }
                        if (!(requestBuyerList.isEmpty())) fastAdapter.add(requestBuyerList);
                    }
                    @Override
                    public void onError(ANError error) {
                        if (error.getErrorCode() != 0) {
                            // received error from server
                            // error.getErrorCode() - the error code from server
                            // error.getErrorBody() - the error body from server
                            // error.getErrorDetail() - just an error detail
                            Log.d("Error", "onError errorCode : " + error.getErrorCode());
                            Log.d("Error", "onError errorBody : " + error.getErrorBody());
                            Log.d("Error", "onError errorDetail : " + error.getErrorDetail());

                        } else {
                            // error.getErrorDetail() : connectionError, parseError, requestCancelledError
                            Log.d("Error", "onError errorDetail : " + error.getErrorDetail());
                        }
                    }
                });
    }


    private void setuprecyclerview() {

        fastAdapter = new FastItemAdapter<RequestBuyer>();
        recyclerView.setLayoutManager(new LinearLayoutManager(getActivity().getApplicationContext()));
        recyclerView.setAdapter(fastAdapter);



    }

}
//just add an `EventHook` to your `FastAdapter` by implementing either a `ClickEventHook`, `LongClickEventHook`, `TouchEventHook`, `CustomEventHook`
fastAdapter.addEventHook(object : ClickEventHook<SimpleImageItem>() {
    override fun onBind(viewHolder: RecyclerView.ViewHolder): View? {
        //return the views on which you want to bind this event
        return if (viewHolder is SimpleImageItem.ViewHolder) {
            viewHolder.viewWhichReactsOnClick
        } else null
    }

    override fun onClick(v: View, position: Int, fastAdapter: FastAdapter<SimpleImageItem>, item: SimpleImageItem) {
        //react on the click event
    }
})
adapter.addClickListener({ vh: SimpleImageItem.ViewHolder -> vh.viewWhichReactsOnClick }) { _, position, _: FastAdapter<SimpleImageItem>, item: SimpleImageItem ->
            //react on the click event
}