Im trying to have two model class for same adapter
This is what I do within getView method,
ShipmentMasterDao item = (ShipmentMasterDao) listForView.get(position);
ShipmentStatusDao statusDao = (ShipmentStatusDao) listForInflation.get(position);
mViewHolder.mDate.setText(item.getStatus());
mViewHolder.mstatus.setText(statusDao.getDate());
Both ShipmentMasterDao and ShipmentStatusDao are model classes.
Im getting the following error
java.lang.ClassCastException: com.vaighai.model.ShipmentMasterDao cannot be cast to com.vaighai.model.ShipmentStatusDao
at com.vaighai.adapters.StatusAdapter.getView(StatusAdapter.java:81)
Following is my adapter code
public class StatusAdapter extends BaseAdapter {
private Context mContext;
private View view;
private ViewHolder mViewHolder;
private LayoutInflater layoutInflater;
private ArrayList<ShipmentMasterDao> listForView;
private ArrayList<ShipmentStatusDao> listForInflation;
public StatusAdapter(Context mContext, ArrayList list) {
super();
mContext = mContext;
listForView = list;
listForInflation = list;
layoutInflater = LayoutInflater.from(mContext);
}
@Override
public int getCount() {
return listForView.size();
}
@Override
public Object getItem(int position) {
return listForView.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public int getViewTypeCount() {
return 2;
}
//Viewholder class to contain inflated xml views
private class ViewHolder {
private TextView mstatus, mDate;
private ImageView image;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
view = convertView;
if (convertView == null) {
//inflate the view for each row of listview
view = layoutInflater.inflate(R.layout.status_progress, null);
//ViewHolder object to contain myadapter.xml elements
mViewHolder = new ViewHolder();
mViewHolder.image = (ImageView) view.findViewById(R.id.progressIcon);
mViewHolder.mDate = (TextView) view.findViewById(R.id.date);
mViewHolder.mstatus = (TextView) view.findViewById(R.id.status);
view.setTag(mViewHolder);
} else {
mViewHolder = (ViewHolder) view.getTag();
}
ShipmentMasterDao item = (ShipmentMasterDao) listForView.get(position);
ShipmentStatusDao statusDao = (ShipmentStatusDao) listForInflation.get(position);
mViewHolder.mDate.setText(item.getStatus());
mViewHolder.mstatus.setText("adapter check");
return view;
}
}
答案 0 :(得分:2)
您正试图将ShipmentMasterDao
投放到ShipmentStatusDao
:
ShipmentStatusDao statusDao = (ShipmentStatusDao) listForInflation.get(position);
我认为您的listForInflation
个ShipmentMasterDao
个项目代替ShipmentStatusDao
。
<强> UPD 强>: 构造函数出错:
listForView = list;
listForInflation = list;
您应该为不同的型号提供不同的列表。 也许是这样的:
public StatusAdapter(Context mContext, ArrayList<ShipmentMasterDao> listForView, ArrayList<ShipmentStatusDao> listForInflation) {
this.listForView = listForView;
this.listForInflation = listForInflation;
答案 1 :(得分:0)
将第二个arraylist(listForInflation)传递给构造函数并尝试使用
public StatusAdapter(Context mContext, ArrayList list, ArrayList list1) {
super();
mContext = mContext;
listForView = list;
listForInflation = list1;
layoutInflater = LayoutInflater.from(mContext);
}
您应该从活动类中调用此适配器类,如下所示
StatusAdapter adapter = new StatusAdapter(activity.this, list, list1);
列表适用于 listForView , list1 适用于 listForInflation