私はViewHolderを私のRecyclerViewAdapter
に持っています。ダイナミクスを受け取った位置に応じてビューを変更するためにそれらを使用しました。なぜmyViewHolderをキャストできないのですか?
@Override
public int getItemViewType(int position) {
int viewType = 0;
if (position == 0) {
viewType = 0;
}else if (position == 1){
viewType = 1;
}else if (position == 2){
viewType = 2;
}
return viewType;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_notification, parent, false);
RecyclerView.ViewHolder viewHolder;
switch (viewType){
case 0:
return new MyViewHolder(v);
case 1:
return new MyViewHolderAccepted(v);
case 2:
return new MyViewHolderRefused(v);
default:
return null;
}
}
@Override
public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {
final DataNotifications dataNotifications = list.get(position);
int type = Integer.valueOf(dataNotifications.getStatue());
switch (getItemViewType(type)){
case 0:
MyViewHolder myViewHolder = (MyViewHolder) holder;
........
break;
case 1:
MyViewHolderAccepted myViewHolderAccepted = (MyViewHolderAccepted) holder;
.......
break;
case 2:
MyViewHolderRefused myViewHolderRefused = (MyViewHolderRefused) holder;
........
break;
}
// Glide.with(context).load(dataNotifications.getThumbnail()).into(holder.thumnail);
}
私はこの例外を得た上記のコードを実行します。
私は各
ViewHolder
に異なるレイアウトを持つべきNotificationAdapter $ MyViewHolderが NotificationAdapter $ MyViewHolderAccepted
にキャストすることはできません
? - しかし、私は1つだけTextView
の色を変更するので、それぞれViewHolder
のレイアウトが高価になるでしょう。それはMyViewHolder
ない反対を拡張することMyViewHolderAccepted
だから
マイviewHolders
public class MyViewHolder extends RecyclerView.ViewHolder {
....
public MyViewHolder(View itemView) {
super(itemView);
....
}
}
public class MyViewHolderAccepted extends MyViewHolder{
...
public MyViewHolderAccepted(View itemView) {
super(itemView);
...
}
public class MyViewHolderRefused extends MyViewHolder{
public MyViewHolderRefused(View itemView) {
super(itemView);
....
}
}
あなたが配列を渡す配列の長さ –
downvoter理由を説明できますか? –
@ V-rundプロットはどの配列ですか? –