I have made a ListView and I want to inflate different xml file depending on the value of iMsg and uMsg (either one of them will always be blank, so the other should be inflated). 
There are 2 xml files I am having. Both having a TextView with different styling. The code casts a ClassCastException. I read in another question's answer to override the getViewTypeCount() method. But I didn't quite get it. Can anyone help?
public class ChatAdapter extends ArrayAdapter<Chatmsg>{
    public ChatAdapter(Context context, ArrayList<Chatmsg> messages) {
        super(context,0,messages);
    }
    public static class iViewHolder{
        TextView imsg;
    }
    public static class uViewHolder{
        TextView umsg;
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent){
        Chatmsg chatmsg = getItem(position);
        View v = null;
        if(chatmsg.getuMsg()== null) {
            iViewHolder iviewHolder;
            v = convertView;
            if (v == null) {
                LayoutInflater vi = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                v = vi.inflate(R.layout.pc_custom_row_i, parent, false);
                iviewHolder = new iViewHolder();
                iviewHolder.imsg = (TextView) v.findViewById(R.id.iMessage);
                v.setTag(iviewHolder);
            } else {
                iviewHolder = (iViewHolder) v.getTag();
            }
            iviewHolder.imsg.setText(chatmsg.getiMsg());
        } else {
                uViewHolder uviewHolder;
                v = convertView;
                if(v== null){
                    LayoutInflater vi1 = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                    v = vi1.inflate(R.layout.pc_custom_row_u,parent,false);
                    uviewHolder = new uViewHolder();
                    uviewHolder.umsg = (TextView) v.findViewById(R.id.uMessage);
                    v.setTag(uviewHolder);
                } else {
                    uviewHolder = (uViewHolder) v.getTag();
                }
                uviewHolder.umsg.setText(chatmsg.getuMsg());
        }
        return v;
    }
}
Here is the Log:
E/AndroidRuntime:   
FATAL EXCEPTION: main Process: in.techxator.zero.zero_chat, PID: 28876  
java.lang.ClassCastException:in.techxator.zero.zero_chat.ChatAdapter$iViewHolder cannot be cast to in.techxator.zero.zero_chat.ChatAdapter$uViewHolder at in.techxator.zero.zero_chat.ChatAdapter.getView(ChatAdapter.java:120)
 
     
    