Хотел бы немного посоветоваться со знающими людьми. Можно ли используя Adapter
делать проверку на то, есть ли данные в массиве. И в зависимости от этого уже делать другое действие или создавать другой ViewHolder(что мне более нужно сейчас).
@Override
public void onBindViewHolder(Adapter.VH p1, int p2)
{
if(data[p2]!=null){
String Text = data[p2];
p1.Txt.setText(Text);
}else{
MA.Empty();//MainActivity
}
}
Данный способ не работает, как его можно изменить чтобы работал?
P.S.Если необходимо, то дополню вопрос.
Здравствуйте!
Создайте свои константы, которые будут соответствовать разным типам.
private final static String VIEW_TYPE_TEXT = "text";
private final static String VIEW_TYPE_IMAGE = "image";
После чего в вашем Adapter(е) переопределите метод getItemViewType(int position)
- этот метод будет брать элемент из вашего списка по позиции, проверять к какому типу он относится и возвращаться int значение.
@Override
public int getItemViewType(int position) {
switch (dataTypes.get(position)){
case VIEW_TYPE_TEXT:
return 0;
case VIEW_TYPE_IMAGE:
return 1;
}
}
Дальше все просто. В методе onCreateViewHolder
есть параметр viewType
смотрите чему он равен и создаете ваш ViewHolder. Здесь на самом деле лучше использовать константы для типов item.
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v;
switch (viewType){
case 0:
{
view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_data_text, parent, false);
return new DataViewHolder(view);
}
case 1:
{
view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_data_image, parent, false);
return new DataViewHolder(view);
}
}
return null;
}
В методе onBindViewHolder
вам нужно будет привести ваш ViewHolder
к нужному типу и передать нужные вам данные из вашей коллекции.
Код целиком:
public class TestAdapter extends RecyclerView.Adapter
{
private final static String VIEW_TYPE_TEXT = "text";
private final static String VIEW_TYPE_IMAGE = "image";
private List<String> dataTypes;
public TestAdapter(List<String> dataTypes){
this.dataTypes = dataTypes;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v;
switch (viewType){
case 0:
{
view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_data_text, parent, false);
return new DataViewHolder(view);
}
case 1:
{
view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_data_image, parent, false);
return new DataViewHolder(view);
}
}
return null;
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
switch (holder.getItemViewType()){
case 0:{
String data = dataTypes.get(position);
TextViewHolder textViewHolder = (TextViewHolder) holder;
textViewHolder.bind(data);
}
case 1:{
String data = dataTypes.get(position);
ImageViewHolder imageViewHolder = (ImageViewHolder) holder;
imageViewHolder.bind(data);
}
}
}
@Override
public int getItemCount() {
return dataTypes.size();
}
@Override
public int getItemViewType(int position) {
switch (dataTypes.get(position)){
case VIEW_TYPE_TEXT:
return 0;
case VIEW_TYPE_IMAGE:
return 1;
}
}
}
Надеюсь вам это поможет, если будут вопросы - спрашивайте.
p.s. обновлен в соотвествии с замечанием @pavloff.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Добрый день, прошу помочь с кодом, решил добавить впервые межстраничный баннер в приложение, но не знаю как сделать заполнение его например...
Пытаюсь парсить адреса картинок с помощью кода:
Здравствуйте, можете подсказать что происходит со ссылками и объектами в этой программе(задача из Head First Java)?
Помогите, не могу разобратьсяЯ начал изучать Spring (IoC Concept), разобрал как можно конфигурировать бины через xml и отдельно через аннотации, но не пойму...