Когда не следует использовать CursorAdapter для ListView

#android

#Android

Вопрос:

Я слышал от своего друга, что CursorAdapter не следует правилу MVC, он принимает значения непосредственно из базы данных в представление, а не через модель. Кроме того, он сказал, что каждый раз, когда пользователь выполняет итерацию элементов через представление списка, CursorAdapter выполняет запрос dbs снова и снова. В результате CursorAdapter не будет использоваться часто. Мне очень любопытно это утверждение, кто-нибудь может мне помочь? Он прав или нет? И если он прав, какой адаптер я могу использовать вместо этого?

Комментарии:

1. абсолютно неправильно, он используется ребятами из Google везде, где это возможно — или CursorAdapter или ResourceCursorAdapter или SimpleCursorAdapter

Ответ №1:

CursorAdapter … переносит значения непосредственно из базы данных в представление, а не через модель

Это зависит от того, какой вы определяете свою модель. Это Cursor может быть модель для тривиальных приложений, и в этом случае CursorAdapter она берет данные из модели и применяет их к представлению.

Ваш друг может иметь в виду модель, определенную как набор пользовательских классов Java; в этом случае CursorAdapter он ничего не будет знать об этих классах.

он сказал, что каждый раз, когда пользователь выполняет итерацию элементов через представление списка, CursorAdapter выполняет запрос dbs снова и снова

Не совсем. CursorAdapter ничего не знает о выполнении запросов к базе данных.

Единственный сценарий, который я могу придумать, который напоминает то, что описывает ваш друг, — это если ваш запрос имеет большой набор результатов, более 1 МБ. В этом случае Cursor не будет храниться весь результирующий набор, как обычно. Вместо этого он содержит часть результатов, и если пользователь прокручивает то, что Cursor содержит, Cursor запускает ввод-вывод базы данных для получения дополнительных результатов (и отпускает некоторые прошлые, чтобы минимизировать общий объем памяти, занимаемый Cursor ).

В результате CursorAdapter не будет использоваться часто

Я бы сказал, что он используется реже, чем есть ArrayAdapter , и оба они в целом выходят из моды, поскольку все больше разработчиков переходят на RecyclerView и RecyclerView.Adapter .

Я думаю, что ваш друг действительно обеспокоен использованием a Cursor в качестве модели, в отличие от наличия «реальной» модели (и, возможно, моделей просмотра) как части архитектуры MVC / MVP / MVVM. Конечно, то, что я слышу из более крупных проектов, указывает на то, что a Cursor в основном используется для заполнения других объектов модели, а не используется непосредственно a CursorAdapter или RecyclerView.Adapter . Но на самом деле это во многом зависит от приложения. Тривиальные приложения не требуют строгого соблюдения какой-либо конкретной архитектуры графического интерфейса, и трудно определить границу между «тривиальными приложениями» и «более крупными проектами».

И если он прав, какой адаптер я могу использовать вместо этого?

Если вашему другу нужны объекты Java-модели, обычно вы используете an ArrayAdapter или a BaseAdapter , который знает, как получить доступ к коллекции объектов модели. Или, в RecyclerView области, вы бы использовали a RecyclerView.Adapter , который знает о структуре вашей коллекции объектов модели.

Комментарии:

1. Большое вам спасибо, вы сделали мой день.