2016-07-25 2 views
-1

Я довольно новичок в разработке приложений, и мне интересно узнать о хороших шаблонах дизайна, когда речь идет о адаптерах для ListViews.Android: повторное использование адаптера при работе с несколькими макетами

У меня нет специального кода (по крайней мере, не простой и понятный код), чтобы сопровождать этот вопрос, но в любом случае, вот что такое.

У меня есть работа, в которой я хочу показать любой Список книг. Я сделал для этого CustomAdapter на основе макета под названием «row.xml». Этот xml включает TextView и ImageView. Я создаю мой CustomAdapter в этой деятельности следующим образом:

customAdapter = new ListAdapterFullList(this, R.layout.row, bookList.getList());

Теперь я хочу, чтобы повторно использовать этот процесс, чтобы показать список книг, но расположение должно быть в этот раз! Он должен быть «row_alt.xml». Вместо TextView и ImageView этот список теперь должен отображать TextView и RatingBar.

Проблема, с которой я столкнулся здесь, состоит в том, что, очевидно, я хочу повторно использовать Activity (так как мне нужно отображать все еще список книг, и все другое поведение одинаковое), но я не знаю, как для управления адаптером. Я не могу просто использовать это:

customAdapter = new ListAdapterFullList(this, R.layout.row_alt, bookList.getList());

, потому что это ListAdapterFullList не реализована для обработки RatingBar вместо ImageView.

Как я могу обойти эту проблему? Нужно ли создавать другой адаптер для отображения этого макета? Если это так, тогда мне также нужно будет изменить мою существующую активность, хотя я не знаю, как это сделать.

Кстати, я много читал о проблемах, когда для каждой строки в ListView нужно использовать разные макеты, но это не то, с чем я борюсь. Я хочу повторно использовать адаптер с совершенно другой компоновкой для адаптера. Сами строки всегда одинаковы.

Благодарим за помощь и извинения за возможный запутанный вопрос. Вы всегда можете запросить дополнительную информацию!

ответ

0

Если row.xml и row_alt.xml имеют только два разных виджета, я предлагаю вам создать два разных адаптера. Если на самом деле существует общее поведение между этими двумя адаптерами, создайте родительский класс, который будет реализовывать общее поведение и сделает ваш два адаптера расширением этого родительского класса. Затем каждый адаптер реализует свой собственный метод [getView()] (https://developer.android.com/reference/android/widget/Adapter.html#getView(int, android.view.View, android.view.ViewGroup)).

Для дальнейшей оптимизации используйте шаблон ViewHolder.

Я также предлагаю вам взглянуть на RecyclerView, которая является новой версией ListView и не нуждаются в ViewHolder Pattern