Я пытаюсь разработать проект в соответствии со стандартами MVP. В руководстве, которому я следовал, автор создал отдельный класс ViewHolder. Я пытался сделать то же самое, но адаптер отказывается работать с отдельным ViewHolder.

Есть 2 ошибки

Не удается разрешить символ «LessonCardView»

«onCreateViewHolder (ViewGroup, int)» в RVAdapter конфликтует с «onCreateViewHolder (ViewGroup, int)» в «android.support.v7.widget.RecyclerView.Adapter»; попытка использовать несовместимый тип возврата

RVAdapter.java

public class RVAdapter extends RecyclerView.Adapter<RVAdapter.LessonCardViewHolder> {

    private String[] mDataset;

    public RVAdapter(String[] dataset) {
        mDataset = dataset;
    }

    @Override
    public LessonCardViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        return new LessonCardViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.lessons_item_card, parent, false));
    }

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

    }

    @Override
    public int getItemCount() {
        return mDataset.length;
    }
}

LessonCardViewHolcer.java

public class LessonCardViewHolder extends RecyclerView.ViewHolder implements LessonCardView {

    private final TextView lessonCardText;

    public LessonCardViewHolder(View itemView) {
        super(itemView);
        lessonCardText = (TextView) itemView.findViewById(R.id.lesson_card_view);
    }

    @Override
    public void setLessonCardText(String text) {
        lessonCardText.setText(text);
    }
}

Я создал подкласс ViewHolder, унаследованный от LessonCardView в RVAdapter. Ошибки исчезли. Но я не уверен, что это правильный путь. Если это работает для кого-то еще, то я делаю что-то не так.

0
Sergey Kovalev 1 Мар 2018 в 18:19

4 ответа

Лучший ответ

Измените декларацию вашего адаптера из этого

public class RVAdapter extends RecyclerView.Adapter<RVAdapter.LessonCardViewHolder> {

К этому

// import here your view holder

public class RVAdapter extends RecyclerView.Adapter<LessonCardViewHolder> {
0
Bakhtiyor Begmatov 1 Мар 2018 в 15:22

Из того, как вы предоставляете фрагменты, похоже, что эти классы находятся в разных файлах или неправильно вложены в один и тот же файл.

Вы пытались использовать RecyclerView.Adapter<LessonCardViewHolder> вместо RecyclerView.Adapter<RVAdapter.LessonCardViewHolder>?

0
Submersed 1 Мар 2018 в 15:22

Вот полное решение - пример класса Recyclerview Adapter

public class IAdapter extends RecyclerView.Adapter<IAdapter.ViewHolder> {


Context context;
ArrayList<Model> modelList;


public ImagesAdapter(Context context,ArrayList<Model> modelList) {
    this.context=context;
    this.modelList=modelList;
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_items, parent, false);
        return new ViewHolderImages(view);
}

@Override
public void onBindViewHolder(ViewHolder holder, int position) {
        Model model=photo.get(position);
        userViewHolder.textView.setText(model.getTitle());

}

public class ViewHolder extends RecyclerView.ViewHolder{

    TextView textView;
    public ViewHolderImages(View itemView) {
        super(itemView);
        textView=(TextView)itemView.findViewById(R.id.textView);
    }
}

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

}
0
akshay 1 Мар 2018 в 15:38

LessonCardViewHolder должен быть вложенным классом в RVAdapter

0
Marina Ž 1 Мар 2018 в 15:25