java.lang.IndexOutOfBoundsException RecyclerViewで複数のデータを表示するとき

SEADラボ:

私は、データの3部1に表示されていRecyclerView

  1. storyList
  2. yukulList
  3. homeList

私は表示するようにしようとしたときstoryListyukulListまたはhomeList内のデータをRecyclerView、それが動作します。しかし、私は例えば、複数のデータを表示しようとしたとき:storyList && yukulListまたはstoryList && yukulList && homeList、それが表示されます

java.lang.IndexOutOfBoundsException

私が追加しようとしましたnotifyDataSetChanged()が、それは動作しますができません。

ShowFavouriteList.java

public class ShowFavouriteList extends AppCompatActivity implements AdapterFavList.FavListener {

    private RecyclerView recyclerView;
    private TextView noFavtsTV;
    AppPreferences appPreferences;
    private SearchView searchView;
    private AdapterFavList yAdapterFavlist;
    private AdapterFavList mAdapterFavlist;
    private AdapterFavList tAdapterFavlist;


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

        SwipeRefreshLayout pullToRefresh = findViewById(R.id.pullToRefresh);
        pullToRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                finish();
                startActivity(getIntent());
            }
        });

        //toolbar logo and desc
        Toolbar topToolBar = (Toolbar) findViewById(R.id.toolbarTidur);
        setSupportActionBar(topToolBar); //munculkan menu ke toolbar
        getSupportActionBar().setDisplayHomeAsUpEnabled(true); //this line shows back button

        recyclerView = findViewById(R.id.recycler_view);
        noFavtsTV = findViewById(R.id.no_favt_text);

        SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences("MyPref", 0);
        SharedPreferences sPTuru = getApplicationContext().getSharedPreferences("MyTuru", 0);
        SharedPreferences sPHome = getApplicationContext().getSharedPreferences("MyHome", 0);
        PreferenceMenejer preferenceMenejer = new PreferenceMenejer(sharedPreferences, sPTuru, sPHome);
        appPreferences = new AppPreferences(preferenceMenejer);

        fetchData();

    } // Oncreate

    private void fetchData() {
        List<Story> storyList = appPreferences.getFavouriteCardList();
        List<YukulModel> yukulList = appPreferences.getFavouriteYukul();
        List<HomeModel> homeList = appPreferences.getFavouriteHome();

        if(storyList != null && storyList.size() > 0) {
            showNoFavtText(false);
            recyclerView.setHasFixedSize(true);
            recyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
            tAdapterFavlist = new AdapterFavList(this, storyList, yukulList, homeList, this, appPreferences);
            recyclerView.setAdapter(tAdapterFavlist);
            tAdapterFavlist.notifyDataSetChanged();
        }

        if(yukulList != null && yukulList.size() > 0) {
            showNoFavtText(false);
            recyclerView.setHasFixedSize(true);
            recyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
            yAdapterFavlist = new AdapterFavList(this, storyList, yukulList, homeList, this, appPreferences);
            recyclerView.setAdapter(yAdapterFavlist);
            yAdapterFavlist.notifyDataSetChanged();
        }

        if(homeList != null && homeList.size() > 0) {
            showNoFavtText(false);
            recyclerView.setHasFixedSize(true);
            recyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
            mAdapterFavlist = new AdapterFavList(this, storyList, yukulList, homeList, this, appPreferences);
            recyclerView.setAdapter(mAdapterFavlist);
            mAdapterFavlist.notifyDataSetChanged();
        }
    }

    @Override
    public void onItemKlik(RecyclerView.ViewHolder viewHolder, HomeModel modelField, int position) {
        // Tidur List
        List<HomeModel> modelList = appPreferences.getFavouriteHome();

            HomeModel click = modelList.get(position);
            Toast.makeText(getApplicationContext(), "Selected: " + click.getName(), Toast.LENGTH_LONG).show();
            int id = Integer.parseInt(click.getIdStory());

            if (id == 0) {
                startActivity(new Intent(this, DoaPagi.class));
            } else if (id == 1) {
                startActivity(new Intent(this, DoaSore.class));
            } else if (id == 2) {
                startActivity(new Intent(this, DoaWc.class));
            } else if (id == 3) {
                startActivity(new Intent(this, DoaMasjid.class));
            } else if (id == 4) {
                startActivity(new Intent(this, DzikirShalat.class));
            } else if (id == 5) {
                startActivity(new Intent(this, ChildYukul.class));
            } else if (id == 6) {
                startActivity(new Intent(this, DoaPakaian.class));
            } else if (id == 7) {
                startActivity(new Intent(this, ChildTidur.class));
            }
    }

    @Override
    public void onItemTuru(RecyclerView.ViewHolder viewHolder, Story tField, int position) {
        // Tidur List
        List<Story> storyList = appPreferences.getFavouriteCardList();

            Story clic = storyList.get(position);
            int idTuru = Integer.parseInt(clic.getIdStory());

            if (idTuru == 0) {
                startActivity(new Intent(this, DoaMauTidur.class));
            } else if (idTuru == 1) {
                startActivity(new Intent(this, DoaBangunt.class));
            } else if (idTuru == 2) {
                startActivity(new Intent(this, DoaJimak.class));
            }
    }

    @Override
    public void onItemYukul(RecyclerView.ViewHolder viewHolder, YukulModel yField, int position) {
        // Tidur List
    }

    private void showNoFavtText(boolean show) {
        noFavtsTV.setVisibility(show ? View.VISIBLE : View.GONE); //jika data yang ditampilkan tidak ada, maka show noFavsTv
        recyclerView.setVisibility(show ? View.GONE : View.VISIBLE); //jika data yang ditampilkan tidak ada, maka don't show rV
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.search_fav, menu);
        getMenuInflater().inflate(R.menu.menu_main, menu);

        // Associate searchable_tidur configuration with the SearchView
        SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
        searchView = (SearchView) menu.findItem(R.id.action_search_fav).getActionView();
        searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
        searchView.setMaxWidth(Integer.MAX_VALUE);

        // listening to search query text change
        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
                // filter recycler view when query submitted
                mAdapterFavlist.getFilter().filter(query);
                return false;
            }

            @Override
            public boolean onQueryTextChange(String query) {
                // filter recycler view when text is changed
                mAdapterFavlist.getFilter().filter(query);
                return false;
            }
        });
        return true;
    }

    // Agar back button pada halaman induk settings berfungsi
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.search_fav) {
            return true;
        }

        switch (item.getItemId()) {
            case android.R.id.home:
                this.finish();
                return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

AdapterFavList.java

public class AdapterFavList extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements Filterable {

    public static final String ACTION_LIKE_IMAGE_CLICKED = "action_like_image_button";

    final int VIEW_TYPE_TIDUR = 0;
    final int VIEW_TYPE_YUKUL = 1;
    final int VIEW_TYPE_HOME = 2;

    private Context context;
    private AppPreferences appPreferences;
    private List<Story> storyList;
    private List<YukulModel> yukulList;
    private List<HomeModel> homeList;
    private List<HomeModel> homeListFiltered;
    private List<Object> collection = new ArrayList<Object>();
    private FavListener listener;

    private int changedItemPosition;
    private boolean isLiked;

    public AdapterFavList(Context context, List<Story> storyList, List<YukulModel> yukulList, List<HomeModel> homeList, FavListener listener, AppPreferences appPreferences) {

        this.context = context;
        this.storyList = storyList;
        this.yukulList = yukulList;
        this.homeListFiltered = homeList;
        this.listener = listener;
        this.appPreferences = appPreferences;

        addData();
    }

    public void addData() {
        storyList = appPreferences.getFavouriteCardList();
        yukulList = appPreferences.getFavouriteYukul();
        homeList = appPreferences.getFavouriteHome();

        if(storyList != null && storyList.size() > 0) {
            collection.addAll(storyList);
        }

        if(yukulList != null && yukulList.size() > 0) {
            collection.addAll(yukulList);
        }

        if(homeList != null && homeList.size() > 0) {
            collection.addAll(homeListFiltered);
        }
    }

    public interface FavListener {
        void onItemKlik(RecyclerView.ViewHolder viewHolder, HomeModel modelField, int position);
        void onItemTuru(RecyclerView.ViewHolder viewHolder, Story tField, int position);
        void onItemYukul(RecyclerView.ViewHolder viewHolder, YukulModel yField, int position);
    }

    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        if(viewType == VIEW_TYPE_TIDUR) {
            return new tidurViewHolder(LayoutInflater.from(context).inflate(R.layout.item_story_favourite_list, parent, false));
        }

        if(viewType == VIEW_TYPE_YUKUL) {
            return new yukulViewHolder(LayoutInflater.from(context).inflate(R.layout.item_favourite_yukul, parent, false));
        }

        if(viewType == VIEW_TYPE_HOME) {
            return new homeViewHolder(LayoutInflater.from(context).inflate(R.layout.item_fav_home, parent, false));
        }

        return null;
    }

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

        Object item = collection.get(position);

        if(holder instanceof tidurViewHolder){
            ((tidurViewHolder) holder).bind(storyList.get(position));
            ((tidurViewHolder) holder).setViewData((Story) item, holder.getAdapterPosition());
        }

        if(holder instanceof yukulViewHolder){
            ((yukulViewHolder) holder).bind(yukulList.get(position));
            ((yukulViewHolder) holder).viewDataYukul((YukulModel) item, holder.getAdapterPosition());
        }

        if(holder instanceof homeViewHolder){
            ((homeViewHolder) holder).bind(homeList.get(position));
            ((homeViewHolder) holder).viewDataHome((HomeModel) item, holder.getAdapterPosition());
        }
    }

    @Override
    public int getItemCount() {
        return collection.size();
    }

    @Override
    public int getItemViewType(int position){

        Object item = collection.get(position);

        if(item instanceof Story) {
            return VIEW_TYPE_TIDUR;
        }

        if(item instanceof YukulModel){
            return VIEW_TYPE_YUKUL;
        }

        if(item instanceof HomeModel){
            return VIEW_TYPE_HOME;
        }

        return -1;
    }

    @Override
    public Filter getFilter() {
        return new Filter() {
            @Override
            protected FilterResults performFiltering(CharSequence charSequence) {
                String charString = charSequence.toString();
                List<HomeModel> homeList = appPreferences.getFavouriteHome();
                if (charString.isEmpty()) {
                    homeListFiltered = homeList;
                }
                else {
                    List<HomeModel> filteredList = new ArrayList<>();
                    for (HomeModel row : homeList) {

                        if ( row.getName().toLowerCase().contains(charString.toLowerCase()) ) {
                            filteredList.add(row);
                        }
                    }

                    homeListFiltered = filteredList;
                }

                FilterResults filterResults = new FilterResults();
                filterResults.values = homeListFiltered;
                return filterResults;
            }

            @Override
            protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
                homeListFiltered = (ArrayList<HomeModel>) filterResults.values;
                notifyDataSetChanged();
            }
        };
    } //Filter

    public void tidurPutHeart(boolean isChecked, Story tidurstory) {
        SharedPreferences tidursharedPreferences = context.getSharedPreferences("Turu", Activity.MODE_PRIVATE);
        SharedPreferences.Editor tidureditor = tidursharedPreferences.edit();
        tidureditor.putBoolean(tidurstory.getIdStory(), isChecked);
        tidureditor.commit();
    }

    public void yukulPutHeart(boolean isChecked, YukulModel yukulstory) {
        SharedPreferences yukulsharedPreferences = context.getSharedPreferences("Yukul", Activity.MODE_PRIVATE);
        SharedPreferences.Editor yukuleditor = yukulsharedPreferences.edit();
        yukuleditor.putBoolean(yukulstory.getIdStory(), isChecked);
        yukuleditor.commit();
    }

    public void homePutHeart(boolean isChecked, HomeModel homestory) {
        SharedPreferences homesharedPreferences = context.getSharedPreferences("Home", Activity.MODE_PRIVATE);
        SharedPreferences.Editor homeeditor = homesharedPreferences.edit();
        homeeditor.putBoolean(homestory.getIdStory(), isChecked);
        homeeditor.commit();
    }

    //ViewHolder
    public class tidurViewHolder extends RecyclerView.ViewHolder {
        private TextView textView;
        private CheckBox likeCheckBox;

        public tidurViewHolder(View itemView) {
            super(itemView);
            textView = itemView.findViewById(R.id.text_view);
            likeCheckBox = itemView.findViewById(R.id.like_button_cb);
        } // itemView

        public void bind(final Story item) {
            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (listener != null){
                        int position = getAdapterPosition();

                        if (position != RecyclerView.NO_POSITION) {
                            listener.onItemTuru(tidurViewHolder.this, item, position);
                        }
                    }
                }
            });
        }

        public void setViewData(final Story story, final int adapterPosition) {

            textView.setText(story.getName());

            if (story.getIsLiked() == 1) {
                likeCheckBox.setChecked(false);
            }
            else {
                likeCheckBox.setChecked(true);
            }

            likeCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

                    changedItemPosition = adapterPosition;

                    if (buttonView.isPressed()) {
                        if (isChecked) {
                            tidurPutHeart(isChecked, story);
                            appPreferences.saveFavouriteCard(story);
                        }
                        else {
                            isLiked = false;
                            tidurPutHeart(isChecked, story);
                            appPreferences.deleteCard(story.getIdStory());
                            // updateLikes();
                            Toast.makeText(context, "Removed", Toast.LENGTH_SHORT).show();

                            if(collection.size() == 0) {
                                ((Activity)context).finish();
                                context.startActivity(((Activity) context).getIntent());
                            }
                        }
                    }
                }
            });

        } //setviewdata

        public void updateLikes() {
            if (!isLiked && storyList.get(changedItemPosition).getIsLiked() == 0) { //jika like dicabut (pada posisi hati yang sedang merah) di halaman favourite list
                storyList.get(changedItemPosition).setIsLiked(0); //maka cabut juga warna merah di halaman favourite list
                notifyItemRangeChanged(getAdapterPosition(), collection.size());
                collection.remove(getAdapterPosition());
                notifyItemRemoved(getAdapterPosition());
            }

        } //updateLikes

    } //tidurViewholder


    //homeViewHolder
    public class homeViewHolder extends RecyclerView.ViewHolder {
        private TextView textView;
        private CheckBox likeCheckBox;

        public homeViewHolder(View itemView) {
            super(itemView);
            textView = itemView.findViewById(R.id.text_view);
            likeCheckBox = itemView.findViewById(R.id.like_button_cb);
        } // itemView

        public void bind(final HomeModel item) {
            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (listener != null){
                        int position = getAdapterPosition();

                        if (position != RecyclerView.NO_POSITION) {
                            listener.onItemKlik(homeViewHolder.this, item, position);
                        }
                    }
                }
            });
        }

        public void viewDataHome(final HomeModel story, final int adapterPosition) {

            textView.setText(story.getName());

            if (story.getIsLiked() == 1) {
                likeCheckBox.setChecked(false);
            }
            else {
                likeCheckBox.setChecked(true);
            }

            likeCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

                    changedItemPosition = adapterPosition;

                    if (buttonView.isPressed()) {
                        if (isChecked) {
                            homePutHeart(isChecked, story);
                            appPreferences.saveFavouriteHome(story);
                        }
                        else {
                            isLiked = false;
                            homePutHeart(isChecked, story);
                            appPreferences.deleteCardHome(story.getIdStory());
                            // updateLikesHome();
                            Toast.makeText(context, "Removed", Toast.LENGTH_SHORT).show();

                            if(collection.size() == 0) {
                                ((Activity)context).finish();
                                context.startActivity(((Activity) context).getIntent());
                            }
                        }
                    }
                }
            });

        } //setviewdata

        public void updateLikesHome() {
            if (!isLiked && homeList.get(changedItemPosition).getIsLiked() == 0) { //jika like dicabut (pada posisi hati yang sedang merah) di halaman favourite list
                homeList.get(changedItemPosition).setIsLiked(0); //maka cabut juga warna merah di halaman favourite list
                notifyItemRangeChanged(getAdapterPosition(), collection.size());
                collection.remove(getAdapterPosition());
                notifyItemRemoved(getAdapterPosition());
            }

        } //updateLikes

    } //homeviewholder


    public class yukulViewHolder extends RecyclerView.ViewHolder {
        private TextView textView;
        private CheckBox likeCheckBox;

        public yukulViewHolder(View itemView) {
            super(itemView);
            textView = itemView.findViewById(R.id.text_view);
            likeCheckBox = itemView.findViewById(R.id.like_button_cb);
        } //itemview

        public void bind(final YukulModel item) {
            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (listener != null){
                        int position = getAdapterPosition();

                        if (position != RecyclerView.NO_POSITION) {
                            listener.onItemYukul(yukulViewHolder.this, item, position);
                        }
                    }
                }
            });
        }

        public void viewDataYukul(final YukulModel yukulId, final int adapterPosition) {

            textView.setText(yukulId.getName());

            if (yukulId.getIsLiked() == 1) {
                likeCheckBox.setChecked(false);
            }
            else {
                likeCheckBox.setChecked(true);
            }

            likeCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

                    changedItemPosition = adapterPosition;

                    if (buttonView.isPressed()) {
                        if (isChecked) {
                            yukulPutHeart(isChecked, yukulId);
                            appPreferences.saveFavouriteYukul(yukulId);
                        }
                        else {
                            isLiked = false;
                            yukulPutHeart(isChecked, yukulId);
                            appPreferences.deleteCardYukul(yukulId.getIdStory());
                            // updateLikeYukul();
                            Toast.makeText(context, "Removed", Toast.LENGTH_SHORT).show();

                            if(collection.size() == 0) {
                                ((Activity)context).finish();
                                context.startActivity(((Activity) context).getIntent());
                            }
                        }
                    }
                }
            });

        } //viewdatayukul

        public void updateLikeYukul() {
            if (!isLiked && yukulList.get(changedItemPosition).getIsLiked() == 0) { //jika like dicabut (pada posisi hati yang sedang merah) di halaman favourite list
                yukulList.get(changedItemPosition).setIsLiked(0); //maka cabut juga warna merah di halaman favourite list
                notifyItemRangeChanged(getAdapterPosition(), collection.size());
                collection.remove(getAdapterPosition());
                notifyItemRemoved(getAdapterPosition());
            }
        } //updateLikes

    } //yukulviewholder


} //HomeAdapter

Logcat

2019-07-20 09:54:52.822 6902-6902/com.seadlab.doadandzikir E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.seadlab.doadandzikir, PID: 6902
    java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
        at java.util.ArrayList.get(ArrayList.java:437)
        at com.seadlab.doadandzikir.FavouriteList.AdapterFavList.onBindViewHolder(AdapterFavList.java:124)
        at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:6482)
        at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:6515)
        at android.support.v7.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:5458)
        at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5724)
        at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5563)
        at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5559)
        at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2229)
        at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1556)
        at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1516)
        at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:608)
        at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3693)
        at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3410)
        at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3962)
        at android.view.View.layout(View.java:20672)
        at android.view.ViewGroup.layout(ViewGroup.java:6194)
        at android.support.v4.widget.SwipeRefreshLayout.onLayout(SwipeRefreshLayout.java:610)
        at android.view.View.layout(View.java:20672)
        at android.view.ViewGroup.layout(ViewGroup.java:6194)
        at android.support.design.widget.HeaderScrollingViewBehavior.layoutChild(HeaderScrollingViewBehavior.java:132)
        at android.support.design.widget.ViewOffsetBehavior.onLayoutChild(ViewOffsetBehavior.java:42)
        at android.support.design.widget.AppBarLayout$ScrollingViewBehavior.onLayoutChild(AppBarLayout.java:1361)
        at android.support.design.widget.CoordinatorLayout.onLayout(CoordinatorLayout.java:869)
        at android.view.View.layout(View.java:20672)
        at android.view.ViewGroup.layout(ViewGroup.java:6194)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
        at android.view.View.layout(View.java:20672)
        at android.view.ViewGroup.layout(ViewGroup.java:6194)
        at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)
        at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656)
        at android.widget.LinearLayout.onLayout(LinearLayout.java:1565)
        at android.view.View.layout(View.java:20672)
        at android.view.ViewGroup.layout(ViewGroup.java:6194)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
        at android.view.View.layout(View.java:20672)
        at android.view.ViewGroup.layout(ViewGroup.java:6194)
        at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)
        at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656)
        at android.widget.LinearLayout.onLayout(LinearLayout.java:1565)
        at android.view.View.layout(View.java:20672)
        at android.view.ViewGroup.layout(ViewGroup.java:6194)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
        at com.android.internal.policy.DecorView.onLayout(DecorView.java:753)
        at android.view.View.layout(View.java:20672)
        at android.view.ViewGroup.layout(ViewGroup.java:6194)
        at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2792)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2319)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1460)
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7183)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:949)
2019-07-20 09:54:52.825 6902-6902/com.seadlab.doadandzikir E/AndroidRuntime:     at android.view.Choreographer.doCallbacks(Choreographer.java:761)
        at android.view.Choreographer.doFrame(Choreographer.java:696)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:935)
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6669)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
P. I:

あなたのアダプタでは、collectionリストは、使用して安全にアクセスするためだけのリストですpositionコールしようとしているがyukulList.get(position)、最終的に例外をスローすることが保証されます。

これらの行のすべてがonBindViewHolder()安全ではないと変更する必要があります。

@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
    // ...
        ((tidurViewHolder) holder).bind(storyList.get(position));
    // ...
        ((yukulViewHolder) holder).bind(yukulList.get(position));
    // ...
        ((homeViewHolder) holder).bind(homeList.get(position));
    // ...
}

あなたがから返されてきたことを「ビュータイプ」の値にアクセスすることができますgetItemViewType()呼び出すことによってholder.getItemViewType()、あなたが使用するビューホルダーと項目の右のタイプを決定するためにそれを使用することができます:

@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
    Object item = collection.get(position);
    int adapterPosition = holder.getAdapterPosition();

    if (holder.getItemViewType() == VIEW_TYPE_TIDUR){
        Story story = (Story) item;
        tidurViewHolder vh = (tidurViewHolder) holder;
        vh.bind(story);
        vh.setViewData(story, adapterPosition);
    } else if (holder.getItemViewType() == VIEW_TYPE_YUKUL){
        YukulModel yukul = (YukulModel) item;
        yukulViewHolder vh = (yukulViewHolder) holder;
        vh.bind(yukul);
        vh.viewDataYukul(yukul, adapterPosition);
    } else if (holder.getItemViewType() == VIEW_TYPE_HOME){
        HomeModel home = (HomeModel) item;
        homeViewHolder vh = (homeViewHolder) holder;
        vh.bind(home);
        vh.viewDataHome(home, adapterPosition);
    }
}

実際に合格する必要はありませんことにも注意してくださいholder.getAdapterPosition()例にsetViewData()あなたは、単に呼び出すことができるので、getAdapterPosition()内部からtidurViewHolderの方法は。

そして私はまた、あなたの組み合わせができることを言うだろうbind()し、setViewData()これであなたを残している、一つに電話を:

@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
    Object item = collection.get(position);

    if (holder.getItemViewType() == VIEW_TYPE_TIDUR){
        ((tidurViewHolder) holder).bind((Story) item);
    } else if (holder.getItemViewType() == VIEW_TYPE_YUKUL){
        ((yukulViewHolder) holder).bind((YukulModel) item);
    } else if (holder.getItemViewType() == VIEW_TYPE_HOME){
        ((homeViewHolder) holder).bind((HomeModel) item);
    }
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=231276&siteId=1