RecyclerView ничего не отображает после обновления до 23.2.1

#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