#java #android #listview #android-recyclerview #adapter
#java #Android #listview #android-recyclerview #адаптер
Вопрос:
У меня есть RecyclerView с другим типом представления в нижнем колонтитуле моей деятельности. Я выполнил все шаги по преобразованию ListView (поскольку я использую его раньше) в RecyclerView, и он работает при первом запуске. Когда я тестирую его снова после обновления до версии 23.2.1, он ничего не показывает, и в журнале нет сообщений об ошибках.
RecyclerView находится внутри FrameLayout с 3 разными типами представления. Я также изменил layout_height для RecyclerView на WRAP_CONTENT с момента обновления до 23.2.1..
Я не знаю, где я ошибаюсь. Я прочитал все вопросы, связанные с этим, и все равно безуспешно.
Вот мой ViewHolder:
public class GenericViewHolder extends RecyclerView.ViewHolder {
private TextView scheme;
private TextView date;
private TextView price;
private TextView news;
private ImageView egaLogo;
private TextView egaText;
public GenericViewHolder(View convertView, int viewType) {
super(convertView);
if (viewType == TYPE_BROKER) {
scheme = (TextView) convertView.findViewById(R.id.scheme);
date = (TextView) convertView.findViewById(R.id.date);
price = (TextView) convertView.findViewById(R.id.price);
} else if (viewType == TYPE_NEWS) {
news = (TextView) convertView.findViewById(R.id.news);
news.setVisibility(convertView.GONE);
} else if (viewType == TYPE_EGA) {
egaLogo = (ImageView) convertView.findViewById(R.id.ega_logo);
egaText = (TextView) convertView.findViewById(R.id.ega_text);
}
}
}
Адаптер:
public class SpotPriceAdapter extends RecyclerView.Adapter<GenericViewHolder> {
private List<SpotPrice> data;
private Context context;
public SpotPriceAdapter(Context context, List<SpotPrice> data){
this.context = context;
this.data = data;
}
@Override
public GenericViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
View itemView;
GenericViewHolder gViewHolder;
if (viewType == TYPE_BROKER) {
itemView = LayoutInflater.from(viewGroup.getContext()).
inflate(R.layout.spot_price_broker, viewGroup, false);
gViewHolder = new GenericViewHolder(itemView, viewType);
return gViewHolder;
} else if (viewType == TYPE_NEWS) {
itemView = LayoutInflater.from(viewGroup.getContext()).
inflate(R.layout.spot_price_news, viewGroup, false);
gViewHolder = new GenericViewHolder(itemView, viewType);
return gViewHolder;
} else if (viewType == TYPE_EGA) {
itemView = LayoutInflater.from(viewGroup.getContext()).
inflate(R.layout.spot_price_ega, viewGroup, false);
gViewHolder = new GenericViewHolder(itemView, viewType);
return gViewHolder;
}
return null;
}
@Override
public void onBindViewHolder (GenericViewHolder holder, int position) {
if (holder.getItemViewType() == TYPE_BROKER) {
// For Broker Prices View
} else if (holder.getItemViewType() == TYPE_NEWS) {
// For News View
} else if (holder.getItemViewType() == TYPE_EGA) {
// For EGA View
}
}
private SpotPrice getItem (int position) {
return data.get (position);
}
private boolean isPositionNews (int position) {
return position == data.size () - 1;
}
private boolean isPositionEGA (int position) {
return position == data.size() - 2;
}
@Override
public int getItemCount() {
return data.size();
}
@Override
public int getItemViewType (int position) {
if (isPositionNews(position)) {
return TYPE_NEWS;
}
if (isPositionEGA(position)) {
return TYPE_EGA;
}
return TYPE_BROKER;
}
}
Если есть кто-нибудь, кто мог бы мне в этом помочь, я буду очень благодарен!!
Редактировать
Это код вызова адаптера в onCreateView:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_spot_price, container, false);
spotList = (RecyclerView) view.findViewById(R.id.spot_list);
layoutManager = new LinearLayoutManager(getActivity(), LinearLayoutManager.HORIZONTAL, false) {
@Override
public boolean canScrollHorizontally() {
return false;
}
};
spotList.setLayoutManager(layoutManager);
Animation marquee = AnimationUtils.loadAnimation(getActivity(), R.anim.marquee);
//spotList.startAnimation(marquee);
//Try and get the spot prices from share preferences first
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getActivity());
String jsonSpotPrices = sp.getString(SpotPrice.PREF_ENTRY,"[]"); //Default empty JSON Array.
List<SpotPrice> spotPrices = SpotPrice.jsonArrayToList(jsonSpotPrices);
spotPriceAdapter = new SpotPriceAdapter(getActivity(), spotPrices);
spotList.setAdapter(spotPriceAdapter);
return view;
}
Комментарии:
1. Вы добавили менеджер компоновки для recyclerview?
2. Да! Я это сделал. Я установил этот LayoutManager, а также адаптер, но по-прежнему не отображаются элементы: (
3. вставьте код вызова вашего адаптера
4. Последняя версия recycler view — 24.2.1: com.android.support:recyclerview-v7:24.2.1