Как работать с пользовательским ArrayAdapter в проекте Android MVP? - PullRequest
0 голосов
/ 23 мая 2019

У меня есть проект Android MVP.Я хочу не публиковать ссылки на Android у докладчика.Таким образом, я могу держать UI отдельно в Activity / View.

В Activity есть ListView, который использует пользовательский ArrayList в адаптере (MyAdapter).При этом используются MyModel объекты для заполнения ListView данными.

Теперь я пытаюсь инициализировать адаптер и ListView.

Выполняя это действие, я мог бы получить что-то вроде

`MyAdapter adapter = new MyAdapter<MyModel>(this, R.layout.list_item, items);`

Проблема в том, что Activity теперь имеет доступ к модели и имеет ссылку наArrayList элементов, которые я хотел сохранить только в презентаторе и управлять ими оттуда.

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

Поэтому вопрос в том, что мне делать вэтот случай?Где и как я могу настроить ArrayAdapter?

Ответы [ 2 ]

1 голос
/ 23 мая 2019

Вы можете сохранить список элементов в Presenter, а затем отправить его в Activity, когда вам нужно настроить адаптер.

Я думаю, что вы можете сделать:

Контракт:

public interface ViewContract {
    void setupContentList(ArrayList<MyModel> list);
}

public interface PresenterContract {
    void onViewCreated();
}

Активность:

public class MainActivity extends Activity implements ViewContract {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        ......
        mListView = findViewById(R.id.listview);
        mPresenter.onViewCreated();
    }

    public void setupContentList(ArrayList<MyModel> list) {
        MyAdapter adapter = new MyAdapter<MyModel>(this, R.layout.list_item, items);
        mListView.setAdapter(adapter);
    }
}

Presenter:

public class Presenter implements PresenterContract {

    public Presenter() {
        ArrayList<MyModel> mItems = new ArrayList();
        // Add items to the list
    }

    public void onViewCreated() {
        mView.setupContentList(mItems);
    }
}
1 голос
/ 23 мая 2019
  1. Я рекомендую вам использовать RecyclerView, а не ListView для лучшей производительности.
  2. Задание может содержать RecyclerView, вы должны попросить докладчика получить нужные данные из репозитория вашей модели и т. Д. После того, как докладчик получил данные, вы должны уведомить Activity о новых данных и установить для них RecyclerAdapter. Теперь ваша активность надувает все, что касается представления, а докладчик является центром данных и логики.
...