Using two Model class for a single adapter

时间:2016-03-02 11:01:54

标签: android listview

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;
    }
}

2 个答案:

答案 0 :(得分:2)

您正试图将ShipmentMasterDao投放到ShipmentStatusDao

ShipmentStatusDao statusDao = (ShipmentStatusDao) listForInflation.get(position);

我认为您的listForInflationShipmentMasterDao个项目代替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

相关问题