参数错误android自定义适配器

时间:2018-02-26 09:31:28

标签: android android-adapter

我正在尝试使用自定义适配器创建ListView但我收到此错误

  

错误:(291,29)错误:类中的构造函数Rijekdetailadapter   Rijekdetailadapter不适用于特定类型;需要:   发现Context,String [],String [],String [],String [],String []:   Rijekdetail,ArrayList原因:实际和正式   参数列表的长度不同

请查看我的剧本

Rijekdetailadapter adapter;
ArrayList<RijekdetailModel> dataModels;

在后台流程中执行

            dataModels= new ArrayList<>();

            try {
                JSONArray jsonArray = new JSONArray(result);

                for (int i = 0; i < jsonArray.length(); i++) {
                    String ItemCode, RijekQty,Tipe, Remark, Attachment;

                    JSONObject c = jsonArray.getJSONObject(i);
                    ItemCode      = c.getString("ItemCode");
                    RijekQty      = c.getString("RijekQty");
                    Tipe          = c.getString("TipeRijek");
                    Remark        = c.getString("Remark");
                    Attachment    = c.getString("attachment");

                    dataModels.add(new RijekdetailModel( ItemCode,  RijekQty, Tipe, Remark, Attachment));

                }

            }
            catch (JSONException e) {
                Log.e("ERROR", "Couldn't Fetch json object" + e);
            }

这是错误部分

   @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
                 adapter  = new Rijekdetailadapter(Rijekdetail.this ,dataModels);
                ListView mylist =  findViewById(android.R.id.list);
        }

这是我的Rijekdetailadapter

public class Rijekdetailadapter  extends BaseAdapter {

    Context context;
    String[] ItemCode,ItemName,RijekQty,Remark,Attachment;
    LayoutInflater inflater;

    public Rijekdetailadapter(Context context, String[] ItemCode,String[] ItemName,String[] RijekQty,String[] Remark,String[] Attachment) {
        this.context = context;
        this.ItemCode = ItemCode;
        this.ItemName = ItemName;
        this.RijekQty = RijekQty;
        this.Remark = Remark;
        this.Attachment = Attachment;
    }

    @Override
    public int getCount() {
        return ItemCode.length;
    }
    @Override
    public Object getItem(int position) {
        return null;
    }
    @Override
    public long getItemId(int position) {
        return 0;
    }

    public View getView(int position, View convertView, ViewGroup parent) {

        inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        View itemView = inflater.inflate(R.layout.rijekdetailitem, parent, false);
        TextView item = (TextView) itemView.findViewById(R.id.itemcode);
        TextView RijekQty = (TextView) itemView.findViewById(R.id.RijekQty);
        TextView Remark = (TextView) itemView.findViewById(R.id.Remark);
        TextView Attachment = (TextView) itemView.findViewById(R.id.Attachment);


        return itemView;
    }


}

这是我的RijekdetailModel

public class RijekdetailModel {
    String ItemCode, RijekQty,Tipe, Remark, Attachment;

    public RijekdetailModel(String ItemCode, String RijekQty,String Tipe,String Remark,String Attachment) {
        this.ItemCode   =   ItemCode;
        this.RijekQty   =   RijekQty;
        this.Tipe       =   Tipe;
        this.Remark     =   Remark;
        this.Attachment =   Attachment;
    }

    public String getItemCode() {
        return ItemCode;
    }

    public void setItemCode(String itemCode) {
        ItemCode = itemCode;
    }

    public String getTipe() {
        return Tipe;
    }

    public void setTipe(String tipe) {
        Tipe = tipe;
    }

    public String getRijekQty() {
        return RijekQty;
    }

    public void setRijekQty(String rijekQty) {
        RijekQty = rijekQty;
    }

    public String getRemark() {
        return Remark;
    }

    public void setRemark(String remark) {
        Remark = remark;
    }

    public String getAttachment() {
        return Attachment;
    }

    public void setAttachment(String attachment) {
        Attachment = attachment;
    }
}

我该如何解决?提前谢谢

3 个答案:

答案 0 :(得分:1)

替换Rijekdetailadapter代码,

 public class Rijekdetailadapter  extends BaseAdapter {

    Context context;
    ArrayList<RijekdetailModel> dataModels;
    LayoutInflater inflater;

    public Rijekdetailadapter(Context context,ArrayList<RijekdetailModel> dataModels) {
        this.context = context;
        this.dataModels= dataModels;
    }

    @Override
    public int getCount() {
        return dataModels.size();
    }
    @Override
    public Object getItem(int position) {
        return dataModels.get(position);
    }
    @Override
    public long getItemId(int position) {
        return 0;
    }

    public View getView(int position, View convertView, ViewGroup parent) {

        inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        View itemView = inflater.inflate(R.layout.rijekdetailitem, parent, false);
        TextView item = (TextView) itemView.findViewById(R.id.itemcode);
        TextView RijekQty = (TextView) itemView.findViewById(R.id.RijekQty);
        TextView Remark = (TextView) itemView.findViewById(R.id.Remark);
        TextView Attachment = (TextView) itemView.findViewById(R.id.Attachment);

   final RijekdetailModel rijekdetailModel = RijekdetailModel.get(position);

        return itemView;
    }


}

答案 1 :(得分:1)

您正在使用以下方式创建适配器:

adapter  = new Rijekdetailadapter(Rijekdetail.this ,dataModels);

您的适配器构造函数是:

public Rijekdetailadapter(Context context, String[] ItemCode,String[] ItemName,String[] RijekQty,String[] Remark,String[] Attachment) {
  ...
}

因此,您需要在创建适配器时提供正确且完整的参数。

答案 2 :(得分:1)

修改 您可以在getView()中获取ItemCode的值,如此字符串itemCode = dataModels.get(position).getItemCode()

 public class Rijekdetailadapter  extends BaseAdapter {

Context context;
ArrayList<RijekdetailModel> dataModels;
LayoutInflater inflater;

public Rijekdetailadapter(Context context, ArrayList<RijekdetailModel> dataModels) {
    this.context = context;
    this.dataModels = dataModels;
}

@Override
public int getCount() {
    return dataModels.size();
}
@Override
public Object getItem(int position) {
    return dataModels.get(position);
}
@Override
public long getItemId(int position) {
    return 0;
}

public View getView(int position, View convertView, ViewGroup parent) {

    inflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    View itemView = inflater.inflate(R.layout.rijekdetailitem, parent, false);

    // edit: you can get ItemCode here:
    String itemCode = dataModels.get(position).getItemCode();
    // after that do waht ever you want :)


    return itemView;
}
}

您的适配器设计错误, 在onPostExecute()方法中,您将适配器创建为:

adapter  = new Rijekdetailadapter(Rijekdetail.this ,dataModels);

但是你的Rijekdetailadapter你的构造函数看起来像这样:

public Rijekdetailadapter(Context context, String[] ItemCode,String[] ItemName,String[] RijekQty,String[] Remark,String[] Attachment) {
    this.context = context;
    this.ItemCode = ItemCode;
    this.ItemName = ItemName;
    this.RijekQty = RijekQty;
    this.Remark = Remark;
    this.Attachment = Attachment;
}

试试这个

public Rijekdetailadapter(Context context, ArrayList<RijekdetailModel> dataModels) {
    this.context = context;
    // fix your code here
}