Разные объекты в утилизации - PullRequest
0 голосов
/ 28 января 2020

Доброе утро, мне нужно составить список с различными классами объектов и перечислить их в этом единственном представлении переработчика. Такие как: продукты Recycler и мне нужно перечислить картофель, бананы и молоко. Очевидно, что это разные объекты.

Я не знаю, как это сделать, из-за метода onBindViewHolder. Мне нужно получить элемент из списка и создать объект, чтобы я мог восстановить данные, но я не знаю, молоко это, банан или картофель.

Моя идея такова: создать класс продукта с атрибутом типа String Таким образом, я восстанавливаю элемент из списка, создаю объектный продукт, получаю значение типа и, если он равен «банан», я создаю объект банан и восстанавливаю значения данных. Это хороший вариант?

Ответы [ 2 ]

1 голос
/ 28 января 2020

Вы можете создать интерфейс Product, где каждый класс Potato, Banana и Milk будет реализовывать этот интерфейс, поэтому ваш адаптер будет содержать список Products.

Если все элементы будут представлены одинаково (например, имя + изображение) - добавьте эти свойства в интерфейс, и все будет легко.

Если вам нужно обрабатывать каждый класс по-разному (например, вам нужно указать c свойство, которым обладает только класс Milk), вы можете проверить, какой класс является вашим текущим продуктом, с помощью метода onBindViewHolder следующим образом:

@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
    Product currentProduct = productLst.get(position);
    if (currentProduct instanceof Banana) {
        // this is a banana
    } else if (currentProduct instanceof Milk){
        // this is milk
    } else if (currentProduct instanceof Potato){
        // this is Potato
    }
}
1 голос
/ 28 января 2020

Вы можете попробовать этот способ

  1. создать суперкласс скажем BaseObjectClass

  2. Затем расширить весь ваш класс с помощью созданного класса BaseObject (Class A расширяет BaseObjectClass \ in kotlin класс A: BaseObjectClass ())

  3. Теперь при создании списка для повторного просмотра создатель списка типа BaseObject (List)
  4. в onBindViewHolder проверяет тип объект с методом ((item) instanceof (A)) и т. д.
abstract class BaseObject {
}

class A extends  BaseObject{

}

class B extends BaseObject{

}

class C extends BaseObject{

}


class TestRecyclerViewAdatper extends RecyclerView.Adapter<RecyclerView.ViewHolder>{
............................................
    List<BaseObject> list = new ArrayList<BaseObject>();
................................................
@Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
        BaseObject item = list.get(position);
        if(item instanceof A){
            A a = (A) item;
        }else if(item instanceof B){
            B b = (B) item;

        }
    }

.........................................................
...........................
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...