Prabhu Konchada
Prabhu Konchada

Reputation: 548

Unable to inflate recycler view programatically

I want to inflate a slider and a recycler view programatically in a fragment. The Slider gets inflated successfully and the swipe refresh also is functioning.

NO ERROR IN THE LOG BUT THE RECYLER VIEW DOESN'T GET INFLATED

 public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment

        View fragmentView = inflater.inflate(R.layout.fragment_conversation, container, false);
        RelativeLayout fragmentRelativeLayout = (RelativeLayout)fragmentView.findViewById(R.id.conversation_fragment_main);

        View header = LayoutInflater.from(getActivity()).inflate(R.layout.slider, container, false);

        View recylerList = LayoutInflater.from(getActivity()).inflate(R.layout.news_layout_recyler_view,container,false);

        headerSlider = (SliderLayout)header.findViewById(R.id.slider);

        TextSliderView textSliderView = new TextSliderView(getActivity().getApplicationContext());
        // initialize a SliderLayout
        textSliderView
                .description("Hello")
                .image("http://media2.intoday.in/indiatoday/images/stories/pawan-kalyan-story-650_010215012726.jpg")
                .setScaleType(BaseSliderView.ScaleType.Fit)
                .setOnSliderClickListener(this);

        //add your extra information
        textSliderView.bundle(new Bundle());
        textSliderView.getBundle()
                .putString("extra", "POWER STAR");

        headerSlider.addSlider(textSliderView);

        headerSlider.setPresetTransformer(SliderLayout.Transformer.Accordion);
        headerSlider.setPresetIndicator(SliderLayout.PresetIndicators.Center_Bottom);
        headerSlider.setCustomAnimation(new DescriptionAnimation());
        headerSlider.setDuration(4000);
        headerSlider.addOnPageChangeListener(this);

        fragmentRelativeLayout.addView(header);
        fragmentRelativeLayout.addView(recylerList);


        newsList = (RecyclerView)recylerList.findViewById(R.id.listNews);
        //newsList = (RecyclerView) recylerList.findViewById(R.id.listNews);
        newsList.addItemDecoration(new DividerItemDecoration(getActivity(),DividerItemDecoration.VERTICAL_LIST));

        callBackListener = this;

        newsListObject = retrieveFromLocalDb.retrieveNewsList();

        // Initializing Swipe To Refresh Layout
       //swipeToRefreshNewsList = (SwipeRefreshLayout)fragmentView.findViewById(R.id.swipeToRefreshNews);
        swipeToRefreshNewsList = (SwipeRefreshLayout) recylerList.findViewById(R.id.swipeToRefreshNews);
        swipeToRefreshNewsList.setOnRefreshListener(this);

        adapter = new recylerViewNewsAdapter(getActivity(),newsListObject);

        if(newsListObject.isEmpty()) {
            new loadNewsListInBackground(this).execute();
        }

        adapter.setNewsDataList((ArrayList<newsModelStore>) newsListObject);
        newsList.setAdapter(adapter);
        newsList.setLayoutManager(new LinearLayoutManager(getActivity()));



        return fragmentView;
    }

The news_layout_recyler_view.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">

<android.support.v4.widget.SwipeRefreshLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/swipeToRefreshNews"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v7.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/listNews"
        >

    </android.support.v7.widget.RecyclerView>


</android.support.v4.widget.SwipeRefreshLayout>

I am pretty sure that the data is retrieved as I can see in the debug log. I don't know why it is not showing up. The adapter is as follows :

 package com.example.prabhukonchada.fanstationmvp;

import android.content.Context;
import android.graphics.drawable.Drawable;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.squareup.picasso.Picasso;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * Created by prabhukonchada on 26/11/15.
 */
public class recylerViewNewsAdapter extends RecyclerView.Adapter<recylerViewNewsAdapter.newsListViewHolder> {

    List<newsModelStore> newsModelStoreList = Collections.emptyList();
    private LayoutInflater inflater;
    Context context;

    public recylerViewNewsAdapter(Context context,List<newsModelStore> newsModelStoreList)
    {
        this.newsModelStoreList = newsModelStoreList;
        inflater = LayoutInflater.from(context);
        this.context = context;
    }

    @Override
    public newsListViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = inflater.inflate(R.layout.news_layout,parent,false);
        newsListViewHolder newsHolder = new newsListViewHolder(view);

        return newsHolder;
    }

    @Override
    public void onBindViewHolder(newsListViewHolder holder, int position) {

        holder.newsInformation.setText(newsModelStoreList.get(position).getNewsInformation());

        if(newsModelStoreList.get(position).getImageUrl()!= null) {
            Picasso.with(context).load(newsModelStoreList.get(position).getImageUrl()).into(holder.newsImage);
        }else
        {
            Drawable userImageDrawable = context.getResources().getDrawable(R.drawable.super_user);
            holder.newsImage.setImageDrawable(userImageDrawable);
        }

    }

    @Override
    public int getItemCount() {
        return 0;
    }

    class newsListViewHolder extends RecyclerView.ViewHolder
    {
        TextView newsInformation;
        ImageView newsImage;
        TextView timeStatus;
        ImageView awesome;
        TextView awesomenessCount;
        View view;

        public newsListViewHolder(View itemView)
        {
            super(itemView);
            newsInformation = (TextView)itemView.findViewById(R.id.newsInformation);
            newsImage = (ImageView)itemView.findViewById(R.id.newsImage);
//            timeStatus = (TextView)itemView.findViewById(R.id.started_timestamp);
//            awesome = (ImageView)itemView.findViewById(R.id.awesomeImage);
//            awesomenessCount = (TextView)itemView.findViewById(R.id.awesomenessCount);
       }
    }

    public void setNewsDataList(ArrayList<newsModelStore> newsModelStoreList)
    {
        this.newsModelStoreList = newsModelStoreList;
        notifyDataSetChanged();
    }


}

Upvotes: 0

Views: 635

Answers (1)

Access Denied
Access Denied

Reputation: 9491

It's no wonder, you return that recycler view adapter has no records:

 @Override
    public int getItemCount() {
        return 0;
    }

Change it to newsModelStoreList.size()

Upvotes: 1

Related Questions