В чем преимущество использования фрагментов в Android, а не мнения?



при разработке для Android, вы можете установить свой целевой (или минимальный) sdk на 4 (API 1.6) и добавить пакет совместимости android (v4), чтобы добавить поддержку Fragments. Вчера я сделал это и успешно реализовал Fragments для визуализации данных из пользовательского класса.

мой вопрос таков: в чем преимущество использования Fragments в отличие от простого получения представления из пользовательского объекта и все еще поддержки API 1.5?

например, скажем у меня есть класс Foo.java:

public class Foo extends Fragment {

    /** Title of the Foo object*/
    private String title;
    /** A description of Foo */
    private String message;

    /** Create a new Foo
     * @param title
     * @param message */
    public Foo(String title, String message) {
        this.title = title;
        this.message = message;
    }//Foo

    /** Retrieves the View to display (supports API 1.5. To use,
     * remove 'extends Fragment' from the class statement, along with
     * the method {@link #onCreateView(LayoutInflater, ViewGroup, Bundle)}) 
     * @param context Used for retrieving the inflater */
    public View getView(Context context) {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View v = inflater.inflate(R.layout.foo, null);
        TextView t = (TextView) v.findViewById(R.id.title);
        t.setText(this.title);
        TextView m = (TextView) v.findViewById(R.id.message);
        m.setText(this.message);
        return v;
    }//getView 

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        if (container == null) {
            return null;
        }
        View v = inflater.inflate(R.layout.foo, null);
        TextView t = (TextView) v.findViewById(R.id.title);
        t.setText(this.title);
        TextView m = (TextView) v.findViewById(R.id.message);
        m.setText(this.message);
        return v;
    }//onCreateView

}//Foo

оба метода очень просты в создании и работе в деятельности, которая, скажем, имеет List<Foo> для отображения (например, программно добавлять к ScrollView), так же как и Fragments действительно все это полезно, или они просто чрезмерно прославленное упрощение получения представления, например, через код выше?

155   6  

6 ответов:

главная причина, чтобы использовать фрагменты для backstack и особенности жизненного цикла. В противном случае пользовательские представления будут более легкими и простыми в реализации.

сначала я фактически попытался создать приложение для телефона / планшета с помощью пользовательских представлений. Все для работы на телефонах и планшетах, даже переключение с одной панели на разделенную панель. Там, где я столкнулся с проблемой, была кнопка "назад" и жизненный цикл. Поскольку я просто обновлял представления вручную...за историей взглядов и их состояний ничего не следило. Поэтому кнопка "назад" работала не так, как ожидалось, и было трудно воссоздать даже последнее состояние во время событий жизненного цикла, например, при вращении приложения. Чтобы исправить это, мне пришлось обернуть свои пользовательские представления во фрагменты и использовать FragmentManager, чтобы предыдущие состояния были сохранены и воссозданы.

я понял после ответа, что я написал на аналогичный вопрос в год ранее:https://stackoverflow.com/a/11126397/618881

Я бы сказал, что фрагменты полезны в двух сценариях: если вы разделяете представления на некоторых устройствах/ориентациях и показываете их в двух действиях и показываете все содержимое в одном на других устройствах. Это был бы случай использования, если вы идете на планшете или, возможно, даже в ландшафтном режиме на телефоне: например, вы показываете список элементов и деталей на одном экране. на телефоне или в портретном режиме вы просто показываете одну часть.

другой вариант использования-это многоразовые представления. Так что если у вас есть некоторые виды, которые видны на различных мероприятиях, а также выполнить некоторые действия, которые вы могли бы поместить это поведение в фрагмент, а затем повторно использовать его. Очевидно, что вы, вероятно, могли бы сделать это с помощью пользовательских виджетов тоже.

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

Android представил фрагменты в Android 3.0 (уровень API 11), в первую очередь для поддержки более динамичных и гибких конструкций пользовательского интерфейса на больших экранах, таких как планшеты. Поскольку экран планшета намного больше, чем у телефона, есть больше возможностей для объединения и обмена компонентами пользовательского интерфейса. Фрагменты позволяют создавать такие проекты без необходимости управления сложными изменениями иерархии представлений. Разделив макет действия на фрагменты, вы получаете возможность изменять структуру действия внешний вид во время выполнения и сохранение этих изменений в заднем стеке, который управляется действием.

здесь вы можете подробнее.

  1. сценарий деятельности разделенный экран - у нас есть один макет и одна деятельность, которая обрабатывает левую правую часть экрана
  2. фрагментация сценария у нас есть один макет для главного экрана, один для левого один для правого

сценарий хороший, если у вас есть простое приложение.

сценарий два хорош, если вы хотите иметь несколько фрагментов и несколько FragmentActivities и вы можете объединить каждый из них. Также вы можете сделать взаимодействие между фрагментарный.

у меня есть разделенный экран Fragmentactivity я могу вызвать его с помощью "Intent Extras" и сообщить fragmentActivity, какой фрагмент должен быть загружен. Фрагменты хороши, потому что они не проявляются, поэтому вы можете сделать многоразовые фрагменты и Фрагментактность.

но это делает ваш проект больше. Но если вы делаете большой проект, вы можете сэкономить много. Потому что вы можете использовать те же фрагменты или ту же активность фрагмента.

и я вещь, что это фрагменты приходят мало поздно, поэтому вы должны попытаться думать по-новому. Может, просто попробовать превратить вашу деятельность в FragmentActivity. Позже попробуйте найти многоразовый код и сделать из него фрагмент.

его полезно, но я не знаю, как прямо сейчас. Но у меня есть кое-какие идеи.

это всегда проблема. Команда Android сделала что-то, и никто не знает, что хорошо. Потому что мы вряд ли узнаем, как это было, и вот он приходит некоторые новые вещи.

на мой взгляд это хорошо, но не по той причине, что google говорить нам.

добавьте один случай при использовании фрагмента или действия над CustomView:

когда вы используете CursorLoader для наблюдения за определенными представлениями, ListView или TextView и хотите обновить их отображаемое значение всякий раз, когда данные вашего ContentProvider обновляются на заднем конце(чаще всего у вас есть служба, которая периодически обновляет вашу локальную базу данных путем опроса данных из удаленной базы данных/облака)

одна большая вещь все вышеперечисленные комментарии не упоминают, что фрагмент остается резидентным в памяти, даже если Android убивает активность и перезапускает его, когда вы делаете что-то вроде изменения ориентации вашего устройства. Это делается по соображениям производительности, но также может привести к неожиданным результатам, если вы ожидали, что фрагменты будут уничтожены только для того, чтобы обнаружить, что они воссоздаются из ниоткуда.

    Ничего не найдено.

Добавить ответ:
Отменить.