我已经制作了一个ListView
并且我想根据iMsg
and的值来膨胀不同的 xml 文件uMsg
(其中一个总是空白,所以另一个应该被膨胀)。
我有 2 个 xml 文件。两者都有TextView
不同的风格。该代码强制转换为ClassCastException
. 我阅读了另一个问题的答案以覆盖该getViewTypeCount()
方法。但我不太明白。任何人都可以帮忙吗?
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;
}
}
这是日志:
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)