#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. Большое вам спасибо, вы сделали мой день.