Как избежать двойственности в Android? - PullRequest
0 голосов
/ 30 января 2012

Мой опыт и хорошие книги научили меня, что повторять одно и то же в коде плохо.Но когда я использую представления Android, я часто повторяю одно и то же даже 4 раза:

дважды в XML:

<LinearLayout                    -1
    android:id="@+id/lila"
    ...
>
    ...
</LineraLayout                   -2

и дважды в коде:

     3               4
LinearLayout ll=(LinearLayout) findViewById(R.id.lila);

Конечно, когда мне нужно изменить тип представления, я должен сделать это в четырех местах, что вызывает ошибки.В XML я мог использовать рефакторинг для одновременного изменения класса макета или даже вида или виджета.Но это мало помогает, потому что наиболее опасное несоответствие, не улавливаемое компилятором, может появиться между кодом и XML.И позже я должен тратить время и искать источник ошибки во время выполнения.

Существуют ли другие возможности для обращения к представлениям из макетов?Не так ли опасно?

Если нет, знаете ли вы какой-нибудь трюк, чтобы изменить или хотя бы проверить все эти места одновременно?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 30 января 2012

Что-то, что может вам помочь (в зависимости от случая, от того, что вы хотите сделать, например, с вашим LinearLayout), - объявить ваш Views как можно более общим. Здесь, в вашем примере, вы можете оставить свои LinearLayout как ViewGroup, если вам не нужны никакие LinearLayout специальные методы. Таким образом, если позже вы решите изменить это расположение в xml, RelativeLayout или FrameLayout и т. Д., У вас не возникнет проблем с приведением.

Вы можете использовать тот же подход для Buttons или других Views, в зависимости от того, какие методы вы используете для них. Например, если вы просто установили onClickListener на своем Button, вы можете оставить для него ссылку только на View (например, View button=findViewById(R.id.button);), а позже вы можете изменить его на ImageView, может быть и до сих пор не имеет проблем с приведением, поскольку они оба расширены с View.

Итак, решение в больших строках: используйте класс с самым высоким level, как можете.

2 голосов
/ 30 января 2012

для повторного использования макета XML, вы можете использовать макеты включения и слияния. http://developer.android.com/resources/articles/layout-tricks-merge.html

Что касается Activity, вы должны использовать ссылки на суперклассы, насколько это возможно, потому что это дает вам гибкость для изменения определенного класса объекта.

Как вместо того, чтобы использовать, мы можем

ViewGroup ll = (ViewGroup) findViewById (R.id.lila);

теперь это может относиться к относительной разметке, линейной разметке, разметке таблицы и т. Д.

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