Фрагменты Android: следует ли повторно использовать 1 фрагмент или создавать новые экземпляры?

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

В одном примере был создан макет, содержащий фрагмент и FrameLayout. В коде, когда элемент выбирается из ListFragment, создается новый фрагмент (с некоторыми данными, которые он требует в конструкторе ), и FrameLayout заменяется этим новым фрагментом (с использованием FragmentTransaction.replace())..

В другом примере есть файл макета, в котором два фрагмента объявлены рядом. Теперь в коде, когда пользователь выбирает элемент из списка в одном фрагменте, выполняется вызов другого фрагмента для обновления данных (на основе выбранного элемента).

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

РЕДАКТИРОВАТЬ:вот код для каждого из двух методов, о которых я говорил:

1:

        mCurCheckPosition = index;

        if (mDualPane) {
            // We can display everything in-place with fragments, so update
            // the list to highlight the selected item and show the data.
            getListView().setItemChecked(index, true);

            // Check what fragment is currently shown, replace if needed.
            DetailsFragment details = (DetailsFragment)
                    getFragmentManager().findFragmentById(R.id.details);
            if (details == null || details.getShownIndex() != index) {
                // Make new fragment to show this selection.
                details = DetailsFragment.newInstance(index);

                // Execute a transaction, replacing any existing fragment
                // with this one inside the frame.
                FragmentTransaction ft = getFragmentManager().beginTransaction();
                ft.replace(R.id.details, details);
                ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
                ft.commit();
            }

        } else {
            // Otherwise we need to launch a new activity to display
            // the dialog fragment with selected text.
            Intent intent = new Intent();
            intent.setClass(getActivity(), DetailsActivity.class);
            intent.putExtra("index", index);
            startActivity(intent);
        }

2:

public void onListItemClick(ListView l, View v, int position, long id) {
    String item = (String) getListAdapter().getItem(position);
    DetailFragment fragment = (DetailFragment) getFragmentManager()
           .findFragmentById(R.id.detailFragment);
    if (fragment != null && fragment.isInLayout()) {
        fragment.setText(item);
    } else {
        Intent intent = new Intent(getActivity().getApplicationContext(),
                DetailActivity.class);
        intent.putExtra("value", item);
        startActivity(intent);

    }

}
19
задан DaveJohnston 24 March 2012 в 13:23
поделиться