2016-12-30 5 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を上書きしません。 2つの異なるViewHolderがあるので、このメソッドを明示的に実装し、return 2する必要があります。

this answerもあります。具体的には、getViewTypeCountのカスタムアダプターを実装しています。

+0

これは、同じクラスを継承しているため、ClassCastExceptionではありません。しかし、拡張中...それは私にRecylerView.ViewHolderとして拡張するオプションを与えています...私はそれをしたいですか?それで、それはそのためのコンストラクタを求めているからです。 –

+0

更新された回答をご覧ください。 –

+0

これはうまくいきました...私はgetViewTypeCountとgetItemViewTypeの両方を使用して、条件ごとに0または1を返してくれました。 –