Фрагменты на устройствах 2.x и 3.x - PullRequest
0 голосов
/ 11 октября 2011

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

До сих пор все мои макеты были частью различных res /Папки layoutxxx и не нуждались в каких-либо ручных изменениях внутри кода src.

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

Поэтому мой вопрос: я хотел бы, как обычно, поместить все разные макеты в их папки res / layout ипусть Android сделает все остальное - даже 2-панельные (на планшетах) или 1-панельные (на телефонах) дисплеи.Есть ли какая-то обертка для этого?

//
// Helper function to show the details of a selected item, either by
// displaying a fragment in-place in the current UI, or starting a
// whole new activity in which it is displayed.
//
void showDetails(int index) {
    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);
    }
}

1 Ответ

0 голосов
/ 11 октября 2011

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

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

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

...