我正在尝试使用自定义适配器创建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;
}
}
我该如何解决?提前谢谢
答案 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
}