2016-12-30 73 views
0

我做了一个ListView,我想根据iMsguMsg(它们中的任何一个总是空白,所以另一个应该被夸大)的值膨胀不同的xml文件。TypeHolder中的ClassCastException Android

我有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) 
+0

如果你可以在你的问题中追加异常堆栈跟踪,这将有所帮助。 –

回答

0

我编辑我以前的答案,因为它不是一个答案。我看到的问题是关于ListView但无论如何,因为我现在主要使用RecyclerView这些天,我想出了RecyclerView的解决方案。

您需要重写getViewTypeCount方法。如果你没有定义它们,Android系统不知道有不同的视图类型。您也可以看看this answer。答案本身不会覆盖getViewTypeCount。您需要明确实施此方法,并且您有两个不同的ViewHolder

你也可以看看this answer,它实现了一个自定义适配器getViewTypeCount来获得一个想法。

+0

好的,因为它们扩展了相同的类,它们不会是ClassCastException。但是,当扩展...它给我的选项扩展为RecylerView.ViewHolder ...你想让我这样做吗?因为那就是为此寻求一个构造函数。 –

+0

请参阅最新的答案。 –

+0

它的工作...我用getViewTypeCount返回2和getItemViewType并返回0或1,根据条件和它的工作... –

相关问题