Я использую эту библиотеку для отображения нескольких типов представлений внутри RecyclerView.
Здесь я использую EnumMapBindAdapter для отображения списка пользовательских страниц.
У меня есть 4 класса DataBinder, каждое связующее имеет список размером 3 (размер может меняться в зависимости от сообщения пользователей). У меня проблема с getEnumFromPosition(), согласно моим предположениям количество выполнений метода getEnumFromPosition() должно быть равно числу связующих (4). Но этого не происходит. У меня всего 4 связующих, и я предполагаю, что метод getEnumFromPosition() должен выполняться только 4 раза (0,1,2,3), но выполнение выполняется. Мое предположение может быть неправильным, если я ошибаюсь, то как можно Я управляю 4 связующими внутри getEnumFromPosition() для разных позиций. Если я положу другой раздел внутри метода getEnumFromPosition(), тогда он вернет один вид, когда позиция превысит.
Вот код SampleEnumMapAdapter.java
public class SampleEnumMapAdapter extends EnumMapBindAdapter<SampleEnumMapAdapter.SampleViewType> {
enum SampleViewType{
TEXT,IMAGE_AND_TEXT, AUDIO_AND_TEXT, VIDEO_AND_TEXT
}
public SampleEnumMapAdapter(){
putBinder(SampleViewType.TEXT, new TextBinder(this));
putBinder(SampleViewType.IMAGE_AND_TEXT, new ImageAndTextBinder(this));
putBinder(SampleViewType.AUDIO_AND_TEXT, new AudioAndTextBinder(this));
putBinder(SampleViewType.VIDEO_AND_TEXT, new VideoAndTextBinder(this));
}
public void setData(List<TextData> dataSetText ,List<ImageAndTextData> dataSetTextAndImage ,List<AudioAndTextData> dataSetTextAndAudio ,List<VideoAndTextData> dataSetTextAndVideo ) {
((TextBinder) getDataBinder(SampleViewType.TEXT)).addAll(dataSetText);
((ImageAndTextBinder) getDataBinder(SampleViewType.IMAGE_AND_TEXT)).addAll(dataSetTextAndImage);
((AudioAndTextBinder) getDataBinder(SampleViewType.AUDIO_AND_TEXT)).addAll(dataSetTextAndAudio);
((VideoAndTextBinder) getDataBinder(SampleViewType.VIDEO_AND_TEXT)).addAll(dataSetTextAndVideo);
}
@Override
public SampleViewType getEnumFromPosition(int position){
if (position == 0) {
return SampleViewType.TEXT;
} else if (position == 1) {
return SampleViewType.IMAGE_AND_TEXT;
} else if(position == 2){
return SampleViewType.AUDIO_AND_TEXT;
}else if(position == 3){
return SampleViewType.VIDEO_AND_TEXT;
}
return null;
}
@Override
public SampleViewType getEnumFromOrdinal(int ordinal) {
return SampleViewType.values()[ordinal];
}
}