Search code examples
javaandroidandroid-recyclerviewserializable

Pass data from RecyclerView to RecyclerViewMore using Serializable - AndroidX


I want to show all items in RecyclerView in Fragment to RecyclerViewMore in Another Activity when I press "See All Items", but I getting null when I want to receive the data from RecyclerViewMore

//SectionAdapter.java

    public class AdapterSectionHotTrendingNews extends RecyclerView.Adapter{

    private Context mContext;
    private ArrayList<ModelSectionHotTrendingNews> modelSectionHotTrendingNews;

    public AdapterSectionHotTrendingNews(Context mContext, ArrayList<ModelSectionHotTrendingNews> modelSectionHotTrendingNews) {
        this.mContext = mContext;
        this.modelSectionHotTrendingNews = modelSectionHotTrendingNews;
    }

    @Override
    public SectionHotTrendingNewsViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_section_hottrendingnews, null);
        return new SectionHotTrendingNewsViewHolder(v);
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {

        final SectionHotTrendingNewsViewHolder sectionHotTrendingNewsViewHolder = (SectionHotTrendingNewsViewHolder) holder;
        ModelSectionHotTrendingNews modelSectionHotTrendingNewsX = modelSectionHotTrendingNews.get(position);

        //Set
        sectionHotTrendingNewsViewHolder.TVSectionTitle.setText(modelSectionHotTrendingNewsX.getHeaderTitle());

        ArrayList singleSectionItems = modelSectionHotTrendingNewsX.getAllItemsInSection();
        /*AdapterSingleHotLatestNews.RecyclerViewClickListener listenerLatestNews;
        listenerLatestNews = new AdapterSingleHotLatestNews.RecyclerViewClickListener() {
            @Override
            public void onRowHotLatestNewsClick(View view, int position) {

            }

            @Override
            public void onIconHotLatestNewsClick(View view, int position) {

            }
        };*/
        AdapterSingleHotTrendingNews itemListDataAdapter = new AdapterSingleHotTrendingNews(mContext, singleSectionItems);

        /*itemRowHolder.recycler_view_list.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                int action = event.getAction();
                switch (action) {
                    case MotionEvent.ACTION_DOWN:
                        // Disallow ScrollView to intercept touch events.
                        v.getParent().requestDisallowInterceptTouchEvent(true);
                        break;
                    case MotionEvent.ACTION_UP:
                        //Allow ScrollView to intercept touch events once again.
                        v.getParent().requestDisallowInterceptTouchEvent(false);
                        break;
                }
                // Handle RecyclerView touch events.
                v.onTouchEvent(event);
                return true;
            }
        });*/


        sectionHotTrendingNewsViewHolder.BTNHotTrendingNewsMore.setOnClickListener(
                new View.OnClickListener() { @Override public void onClick(View v) {
                    Intent intent = new Intent(mContext, TabMoreHotActivity.class);
                    new Intent().putExtra("MoreNews", modelSectionHotTrendingNews.get(position).getAllItemsInSection());
                mContext.startActivity(intent); } });


        /*Glide.with(mContext)
                .load(feedItem.getImageURL())
                .diskCacheStrategy(DiskCacheStrategy.ALL)
                .centerCrop()
                .error(R.drawable.bg)
                .into(feedListRowHolder.thumbView);*/

        //SetRecyclerView
        sectionHotTrendingNewsViewHolder.RecyclerViewSectionHotTrendingNews.setHasFixedSize(true);
        sectionHotTrendingNewsViewHolder.RecyclerViewSectionHotTrendingNews.setLayoutManager(new LinearLayoutManager(mContext, LinearLayoutManager.HORIZONTAL, false));
        sectionHotTrendingNewsViewHolder.RecyclerViewSectionHotTrendingNews.setAdapter(itemListDataAdapter);
        sectionHotTrendingNewsViewHolder.RecyclerViewSectionHotTrendingNews.setNestedScrollingEnabled(false);
    }

    @Override
    public int getItemCount() {
        int itemCount = modelSectionHotTrendingNews.size();
        return itemCount;
    }

    public class SectionHotTrendingNewsViewHolder extends RecyclerView.ViewHolder {

        protected TextView TVSectionTitle;
        protected ImageView BTNHotTrendingNewsMore;
        protected RecyclerView RecyclerViewSectionHotTrendingNews;
        protected RecyclerView RecyclerViewMoreSectionHotTrendingNews;

        public SectionHotTrendingNewsViewHolder(View itemView) {
            super(itemView);

            TVSectionTitle = (TextView) itemView.findViewById(R.id.TV_SectionTitle);
            BTNHotTrendingNewsMore= (ImageView) itemView.findViewById(R.id.BTN_HotTrendingNewsMore);
            RecyclerViewSectionHotTrendingNews = (RecyclerView) itemView.findViewById(R.id.RecyclerView_Section_HotTrendingNews);
            RecyclerViewMoreSectionHotTrendingNews = (RecyclerView) itemView.findViewById(R.id.RecyclerViewMore_Section_HotTrendingNews);
        }

    }

}

//SingleAdapter.java

    public class AdapterSingleHotTrendingNews extends RecyclerView.Adapter{

    private Context mContext;
    private ArrayList<ModelSingleHotTrendingNews> modelSingleHotTrendingNews;

    public AdapterSingleHotTrendingNews(Context mContext, ArrayList<ModelSingleHotTrendingNews> modelSingleHotTrendingNews) {
        this.mContext = mContext;
        this.modelSingleHotTrendingNews = modelSingleHotTrendingNews;
    }

    //Container
    @Override
    public SingleHotTrendingNewsViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
        View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_single_hottrendingnews, null);
        return new SingleHotTrendingNewsViewHolder(v);
    }

    //Fill Container with Model Setter Getter
    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {

        final SingleHotTrendingNewsViewHolder singleHotTrendingNewsViewHolder = (SingleHotTrendingNewsViewHolder) holder;
        final ModelSingleHotTrendingNews modelSingleHotTrendingNewsX = modelSingleHotTrendingNews.get(position);

        //Set
        singleHotTrendingNewsViewHolder.TVGameDate.setText(modelSingleHotTrendingNewsX.getGamedate());
        singleHotTrendingNewsViewHolder.TVGameDescription.setText(modelSingleHotTrendingNewsX.getGamedescription());
        singleHotTrendingNewsViewHolder.IMGGameImage.setImageResource(modelSingleHotTrendingNewsX.getGameimage());



        singleHotTrendingNewsViewHolder.ICONHotTrendingNewsSaving.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                final Boolean booltrendingnewssaving = modelSingleHotTrendingNewsX.getTrendingnewssaving();

                final int id = modelSingleHotTrendingNewsX.getId();

                if (booltrendingnewssaving == true){
                    Toast.makeText(v.getContext(), "Turn Off Saved News " + id, Toast.LENGTH_SHORT).show();
                    singleHotTrendingNewsViewHolder.ICONHotTrendingNewsSaving.setImageResource(R.drawable.saved_off);
                    modelSingleHotTrendingNewsX.setTrendingnewssaving(false);
                    /*updateSavedNewsSaving("update_newssaving", id, false);*/
                } else if(booltrendingnewssaving == false) {
                    Toast.makeText(v.getContext(), "Turn On Saved News " + id, Toast.LENGTH_SHORT).show();
                    singleHotTrendingNewsViewHolder.ICONHotTrendingNewsSaving.setImageResource(R.drawable.saved_on);
                    modelSingleHotTrendingNewsX.setTrendingnewssaving(true);
                    /*updateSavedNewsSaving("update_newssaving", id, true);*/
                }
            }
        });



       /* Glide.with(mContext)
                .load(feedItem.getImageURL())
                .diskCacheStrategy(DiskCacheStrategy.ALL)
                .centerCrop()
                .error(R.drawable.bg)
                .into(feedListRowHolder.thumbView);*/

        singleHotTrendingNewsViewHolder.ROWHotTrendingNewsContainer.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(v.getContext(), modelSingleHotTrendingNews.get(position).getGamedescription(), Toast.LENGTH_SHORT).show();

                //Passing Data to GameDescriptionActivity
                Intent intent = new Intent(mContext, GameDetailActivity.class);
                intent.putExtra("ImagePKG",  modelSingleHotTrendingNews.get(position).getGameimage());
                intent.putExtra("NamePKG",  modelSingleHotTrendingNews.get(position).getGamedate());
                intent.putExtra("UrlPKG",  modelSingleHotTrendingNews.get(position).getId());
                intent.putExtra("DescriptionPKG",  modelSingleHotTrendingNews.get(position).getGamedescription());
                mContext.startActivity(intent);
            }
        });
    }

    @Override
    public int getItemCount() {
        int itemCount = modelSingleHotTrendingNews.size();
        return itemCount;
    }

    public class SingleHotTrendingNewsViewHolder extends RecyclerView.ViewHolder{
        TextView TVGameDate;
        TextView TVGameDescription;
        ImageView IMGGameImage;

        ImageView ICONHotTrendingNewsSaving;
        private RelativeLayout ROWHotTrendingNewsContainer;


        public SingleHotTrendingNewsViewHolder(View itemView) {
            super(itemView);

            TVGameDate = itemView.findViewById(R.id.TV_GameDate);
            TVGameDescription = itemView.findViewById(R.id.TV_GameDescription);
            IMGGameImage = itemView.findViewById(R.id.IMG_GameImage);

            ICONHotTrendingNewsSaving = itemView.findViewById(R.id.ICON_HotTrendingNewsSaving);
            ROWHotTrendingNewsContainer = itemView.findViewById(R.id.ROW_HotTrendingNewsContainer);
        }

    }


}

//ModelSection.java

    public class ModelSectionHotTrendingNews implements Serializable {

    private String headerTitle;
    private ArrayList<ModelSingleHotTrendingNews> allItemsInSection;

    public ModelSectionHotTrendingNews() {
    }

    public String getHeaderTitle() {
        return headerTitle;
    }

    public void setHeaderTitle(String headerTitle) {
        this.headerTitle = headerTitle;
    }

    public ArrayList<ModelSingleHotTrendingNews> getAllItemsInSection() {
        return allItemsInSection;
    }

    public void setAllItemsInSection(ArrayList<ModelSingleHotTrendingNews> allItemsInSection) {
        this.allItemsInSection = allItemsInSection;
    }


}

//ModelSingle.java

    public class ModelSingleHotTrendingNews implements Serializable {

    private int id;
    private String gamedate;
    private String gamedescription;
    private int gameimage;

    private Boolean trendingnewssaving;
    private String value;
    private String message;

    public ModelSingleHotTrendingNews(int id, String gamedate, String gamedescription, int gameimage, Boolean trendingnewssaving, String value, String message) {
        this.id = id;
        this.gamedate = gamedate;
        this.gamedescription = gamedescription;
        this.gameimage = gameimage;
        this.trendingnewssaving = trendingnewssaving;
        this.value = value;
        this.message = message;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getGamedate() {
        return gamedate;
    }

    public void setGamedate(String gamedate) {
        this.gamedate = gamedate;
    }

    public String getGamedescription() {
        return gamedescription;
    }

    public void setGamedescription(String gamedescription) {
        this.gamedescription = gamedescription;
    }

    public int getGameimage() {
        return gameimage;
    }

    public void setGameimage(int gameimage) {
        this.gameimage = gameimage;
    }

    public Boolean getTrendingnewssaving() {
        return trendingnewssaving;
    }

    public void setTrendingnewssaving(Boolean trendingnewssaving) {
        this.trendingnewssaving = trendingnewssaving;
    }

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}

//This function SectionAdapter.java is to send data from RecyclerView in Fragment to RecyclerViewMore Activity

    sectionHotTrendingNewsViewHolder.BTNHotTrendingNewsMore.setOnClickListener(
                new View.OnClickListener() { @Override public void onClick(View v) {
                    Intent intent = new Intent(mContext, TabMoreHotActivity.class);
                    new Intent().putExtra("MoreNews", modelSectionHotTrendingNews.get(position).getAllItemsInSection());
                mContext.startActivity(intent); } });

//I use same Model in those RecyclerViews but different Adapter //I use RecyclerView in Fragment AdapterSection.java,AdapterSingle.java,ModelSection.java,ModelSingle.java //I user RecyclerViewMore in Activity AdapterMoreSection.java,AdapterMoreSingle.java,ModelSection.java,ModelSingle.java //RecyclerViewMoreActivity.java

    public class TabMoreHotActivity extends AppCompatActivity {



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fragmentmore_tabhot);

        AdapterMoreSectionHotTrendingNews adapterMoreSectionHotTrendingNews;
        ArrayList<ModelSectionHotTrendingNews> modelSectionHotTrendingNews = null;
        Bundle bundle = getIntent().getExtras();
        if(bundle!=null)
        {
            modelSectionHotTrendingNews = (ArrayList<ModelSectionHotTrendingNews>) bundle.getSerializable("MoreNews");
        }


        //1
        RecyclerView RecyclerViewMoreSingleHotTrendingNews = findViewById(R.id.RecyclerViewMore_Single_HotTrendingNews);
        RecyclerViewMoreSingleHotTrendingNews.setHasFixedSize(true);
        adapterMoreSectionHotTrendingNews = new AdapterMoreSectionHotTrendingNews(this, modelSectionHotTrendingNews);
        RecyclerViewMoreSingleHotTrendingNews.setAdapter(adapterMoreSectionHotTrendingNews);
        RecyclerViewMoreSingleHotTrendingNews.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));



        //Optimized
        RecyclerViewMoreSingleHotTrendingNews.setHasFixedSize(true);
        RecyclerViewMoreSingleHotTrendingNews.setItemViewCacheSize(20);
    }
}

//I got this error

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.indofun.android.indojoy, PID: 32309
java.lang.NullPointerException: Attempt to invoke virtual method 'int java.util.ArrayList.size()' on a null object reference
    at com.indofun.android.indojoy.Adapters.AdapterMore_HotTrendingNews.AdapterMoreSectionHotTrendingNews.getItemCount(AdapterMoreSectionHotTrendingNews.java:109)
    at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep1(RecyclerView.java:4042)
    at androidx.recyclerview.widget.RecyclerView.onMeasure(RecyclerView.java:3532)
    at android.view.View.measure(View.java:23279)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6928)
    at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1514)
    at android.widget.LinearLayout.measureVertical(LinearLayout.java:806)
    at android.widget.LinearLayout.onMeasure(LinearLayout.java:685)
    at android.view.View.measure(View.java:23279)
    at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:715)
    at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:461)
    at android.view.View.measure(View.java:23279)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6928)
    at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
    at androidx.appcompat.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:143)
    at android.view.View.measure(View.java:23279)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6928)
    at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1514)
    at android.widget.LinearLayout.measureVertical(LinearLayout.java:806)
    at android.widget.LinearLayout.onMeasure(LinearLayout.java:685)
    at android.view.View.measure(View.java:23279)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6928)
    at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
    at android.view.View.measure(View.java:23279)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6928)
    at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1514)
    at android.widget.LinearLayout.measureVertical(LinearLayout.java:806)
    at android.widget.LinearLayout.onMeasure(LinearLayout.java:685)
    at android.view.View.measure(View.java:23279)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6928)
    at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
    at com.android.internal.policy.DecorView.onMeasure(DecorView.java:898)
    at android.view.View.measure(View.java:23279)
    at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2873)
    at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1910)
    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2165)
    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1779)
    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7810)
    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:911)
    at android.view.Choreographer.doCallbacks(Choreographer.java:723)
    at android.view.Choreographer.doFrame(Choreographer.java:658)
    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:897)
    at android.os.Handler.handleCallback(Handler.java:789)
    at android.os.Handler.dispatchMessage(Handler.java:98)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6938)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)

//Provide the code it will help me a lot

//UPDATED

//AdapterMoreSingle

    public class AdapterMoreSingleHotTrendingNews extends RecyclerView.Adapter{

    private Context mContext;
    private ArrayList<ModelSingleHotTrendingNews> modelSingleHotTrendingNews;

    public AdapterMoreSingleHotTrendingNews(Context mContext, ArrayList<ModelSingleHotTrendingNews> modelSingleHotTrendingNews) {
        this.mContext = mContext;
        this.modelSingleHotTrendingNews = modelSingleHotTrendingNews;
    }

    //Container
    @Override
    public SingleMoreHotTrendingNewsViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
        View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.itemmore_single_hottrendingnews, null);
        return new SingleMoreHotTrendingNewsViewHolder(v);
    }

    //Fill Container with Model Setter Getter
    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {

        final SingleMoreHotTrendingNewsViewHolder singleMoreHotTrendingNewsViewHolder = (SingleMoreHotTrendingNewsViewHolder) holder;
        final ModelSingleHotTrendingNews modelSingleHotTrendingNewsX = modelSingleHotTrendingNews.get(position);

        //Set
        singleMoreHotTrendingNewsViewHolder.TVGameDate.setText(modelSingleHotTrendingNewsX.getGamedate());
        singleMoreHotTrendingNewsViewHolder.TVGameDescription.setText(modelSingleHotTrendingNewsX.getGamedescription());
        singleMoreHotTrendingNewsViewHolder.IMGGameImage.setImageResource(modelSingleHotTrendingNewsX.getGameimage());



        singleMoreHotTrendingNewsViewHolder.ICONHotTrendingNewsSaving.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                final Boolean booltrendingnewssaving = modelSingleHotTrendingNewsX.getTrendingnewssaving();

                final int id = modelSingleHotTrendingNewsX.getId();

                if (booltrendingnewssaving == true){
                    Toast.makeText(v.getContext(), "Turn Off Saved News " + id, Toast.LENGTH_SHORT).show();
                    singleMoreHotTrendingNewsViewHolder.ICONHotTrendingNewsSaving.setImageResource(R.drawable.saved_off);
                    modelSingleHotTrendingNewsX.setTrendingnewssaving(false);
                    /*updateSavedNewsSaving("update_newssaving", id, false);*/
                } else if(booltrendingnewssaving == false) {
                    Toast.makeText(v.getContext(), "Turn On Saved News " + id, Toast.LENGTH_SHORT).show();
                    singleMoreHotTrendingNewsViewHolder.ICONHotTrendingNewsSaving.setImageResource(R.drawable.saved_on);
                    modelSingleHotTrendingNewsX.setTrendingnewssaving(true);
                    /*updateSavedNewsSaving("update_newssaving", id, true);*/
                }
            }
        });



       /* Glide.with(mContext)
                .load(feedItem.getImageURL())
                .diskCacheStrategy(DiskCacheStrategy.ALL)
                .centerCrop()
                .error(R.drawable.bg)
                .into(feedListRowHolder.thumbView);*/

        singleMoreHotTrendingNewsViewHolder.ROWHotTrendingNewsContainer.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(v.getContext(), modelSingleHotTrendingNews.get(position).getGamedescription(), Toast.LENGTH_SHORT).show();

                //Passing Data to GameDescriptionActivity
                Intent intent = new Intent(mContext, GameDetailActivity.class);
                intent.putExtra("ImagePKG",  modelSingleHotTrendingNews.get(position).getGameimage());
                intent.putExtra("NamePKG",  modelSingleHotTrendingNews.get(position).getGamedate());
                intent.putExtra("UrlPKG",  modelSingleHotTrendingNews.get(position).getId());
                intent.putExtra("DescriptionPKG",  modelSingleHotTrendingNews.get(position).getGamedescription());
                mContext.startActivity(intent);
            }
        });
    }

    @Override
    public int getItemCount() {
        int itemCount = modelSingleHotTrendingNews.size();
        return itemCount;
    }

    public class SingleMoreHotTrendingNewsViewHolder extends RecyclerView.ViewHolder{
        TextView TVGameDate;
        TextView TVGameDescription;
        ImageView IMGGameImage;

        ImageView ICONHotTrendingNewsSaving;
        private RelativeLayout ROWHotTrendingNewsContainer;


        public SingleMoreHotTrendingNewsViewHolder(View itemView) {
            super(itemView);

            TVGameDate = itemView.findViewById(R.id.TV_GameDate);
            TVGameDescription = itemView.findViewById(R.id.TV_GameDescription);
            IMGGameImage = itemView.findViewById(R.id.IMG_GameImage);

            ICONHotTrendingNewsSaving = itemView.findViewById(R.id.ICON_HotTrendingNewsSaving);
            ROWHotTrendingNewsContainer = itemView.findViewById(R.id.ROW_HotTrendingNewsContainer);
        }

    }


}

//UPDATED2 AdapterSectionMore.java

public class AdapterMoreSectionHotTrendingNews extends RecyclerView.Adapter {

private Context mContext;
private ArrayList<ModelSectionHotTrendingNews> modelSectionHotTrendingNews;

public AdapterMoreSectionHotTrendingNews(Context mContext, ArrayList<ModelSectionHotTrendingNews> modelSectionHotTrendingNews) {
    this.mContext = mContext;
    this.modelSectionHotTrendingNews = modelSectionHotTrendingNews;
}

@Override
public SectionMoreHotTrendingNewsViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.itemmore_section_hottrendingnews, null);
    return new SectionMoreHotTrendingNewsViewHolder(v);
}


@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {

    final SectionMoreHotTrendingNewsViewHolder sectionMoreHotTrendingNewsViewHolder = (SectionMoreHotTrendingNewsViewHolder) holder;
    ModelSectionHotTrendingNews modelSectionHotTrendingNewsX = modelSectionHotTrendingNews.get(position);

    //Set
    sectionMoreHotTrendingNewsViewHolder.TVSectionTitle.setText(modelSectionHotTrendingNewsX.getHeaderTitle());
    // here you have to change your ArrayList to ArrayList<ModelSingleHotTrendingNews>
    ArrayList<ModelSingleHotTrendingNews> singleSectionItems = modelSectionHotTrendingNewsX.getAllItemsInSection();

    /*AdapterSingleHotLatestNews.RecyclerViewClickListener listenerLatestNews;
    listenerLatestNews = new AdapterSingleHotLatestNews.RecyclerViewClickListener() {
        @Override
        public void onRowHotLatestNewsClick(View view, int position) {

        }

        @Override
        public void onIconHotLatestNewsClick(View view, int position) {

        }
    };*/
    AdapterMoreSingleHotTrendingNews itemListDataAdapter = new AdapterMoreSingleHotTrendingNews(mContext, singleSectionItems);

    /*itemRowHolder.recycler_view_list.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            int action = event.getAction();
            switch (action) {
                case MotionEvent.ACTION_DOWN:
                    // Disallow ScrollView to intercept touch events.
                    v.getParent().requestDisallowInterceptTouchEvent(true);
                    break;
                case MotionEvent.ACTION_UP:
                    //Allow ScrollView to intercept touch events once again.
                    v.getParent().requestDisallowInterceptTouchEvent(false);
                    break;
            }
            // Handle RecyclerView touch events.
            v.onTouchEvent(event);
            return true;
        }
    });*/


    final String sectionTitle = modelSectionHotTrendingNewsX.getHeaderTitle();
    sectionMoreHotTrendingNewsViewHolder.BTNHotTrendingNewsMore.setOnClickListener(
            new View.OnClickListener() {
                @Override public void onClick(View v) {
                    //More IN RecyclerViewMore
                }
            });


    /*Glide.with(mContext)
            .load(feedItem.getImageURL())
            .diskCacheStrategy(DiskCacheStrategy.ALL)
            .centerCrop()
            .error(R.drawable.bg)
            .into(feedListRowHolder.thumbView);*/

    //SetRecyclerView
    sectionMoreHotTrendingNewsViewHolder.RecyclerViewMoreSectionHotTrendingNews.setHasFixedSize(true);
    sectionMoreHotTrendingNewsViewHolder.RecyclerViewMoreSectionHotTrendingNews.setLayoutManager(new LinearLayoutManager(mContext, LinearLayoutManager.HORIZONTAL, false));
    sectionMoreHotTrendingNewsViewHolder.RecyclerViewMoreSectionHotTrendingNews.setAdapter(itemListDataAdapter);
    sectionMoreHotTrendingNewsViewHolder.RecyclerViewMoreSectionHotTrendingNews.setNestedScrollingEnabled(false);
}

@Override
public int getItemCount() {
    int itemCount = modelSectionHotTrendingNews.size();
    return itemCount;
}

public class SectionMoreHotTrendingNewsViewHolder extends RecyclerView.ViewHolder {

    protected TextView TVSectionTitle;
    protected ImageView BTNHotTrendingNewsMore;
    protected RecyclerView RecyclerViewMoreSectionHotTrendingNews;

    public SectionMoreHotTrendingNewsViewHolder(View itemView) {
        super(itemView);

        TVSectionTitle = (TextView) itemView.findViewById(R.id.TV_SectionTitle);
        BTNHotTrendingNewsMore= (ImageView) itemView.findViewById(R.id.BTN_HotTrendingNewsMore);
        RecyclerViewMoreSectionHotTrendingNews = (RecyclerView) itemView.findViewById(R.id.RecyclerViewMore_Section_HotTrendingNews);
    }

}

}


Solution

  • Because you are passing null modelSectionHotTrendingNews to your adapter.

    You just need to initialize your ArrayList in your TabMoreHotActivity

    And one more thing you have to set layout manger to your recycler view before set adapter.

    public class TabMoreHotActivity extends AppCompatActivity {
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fragmentmore_tabhot);
    
        AdapterMoreSectionHotTrendingNews adapterMoreSectionHotTrendingNews;
        // here you have to initialize it 
        ArrayList<ModelSectionHotTrendingNews> modelSectionHotTrendingNews = new ArrayList<>();
        Bundle bundle = getIntent().getExtras();
        if(bundle!=null)
        {
            modelSectionHotTrendingNews = (ArrayList<ModelSectionHotTrendingNews>) bundle.getSerializable("MoreNews");
        }
    
    
        //1
        RecyclerView RecyclerViewMoreSingleHotTrendingNews = findViewById(R.id.RecyclerViewMore_Single_HotTrendingNews);
        RecyclerViewMoreSingleHotTrendingNews.setHasFixedSize(true);
        adapterMoreSectionHotTrendingNews = new AdapterMoreSectionHotTrendingNews(this, modelSectionHotTrendingNews);
    
        // here have to set layout manager before set adapter
        RecyclerViewMoreSingleHotTrendingNews.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
    
        // and then you have to set adapter to recyclerview 
     RecyclerViewMoreSingleHotTrendingNews.setAdapter(adapterMoreSectionHotTrendingNews);
    
    
    
    
        //Optimized
        RecyclerViewMoreSingleHotTrendingNews.setHasFixedSize(true);
        RecyclerViewMoreSingleHotTrendingNews.setItemViewCacheSize(20);
       }
    }
    

    UPDATE

    Change ArrayList to ArrayList<ModelSingleHotTrendingNews> inside onBindViewHolder in AdapterMoreSectionHotTrendingNews.

     @Override
        public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
    
            final SectionMoreHotTrendingNewsViewHolder sectionMoreHotTrendingNewsViewHolder = (SectionMoreHotTrendingNewsViewHolder) holder;
            ModelSectionHotTrendingNews modelSectionHotTrendingNewsX = modelSectionHotTrendingNews.get(position);
    
            //Set
            sectionMoreHotTrendingNewsViewHolder.TVSectionTitle.setText(modelSectionHotTrendingNewsX.getHeaderTitle());
            // here you have to change your ArrayList to ArrayList<ModelSingleHotTrendingNews> 
            ArrayList<ModelSingleHotTrendingNews> singleSectionItems = modelSectionHotTrendingNewsX.getAllItemsInSection();
    // reset of your codes here.