На планшете приложение работает, на смартфоне падает

Рейтинг: 1Ответов: 1Опубликовано: 19.11.2014

Привет.

Есть код в Activity. Меняется фрагмент. Приложение работает на планшете, а на смартфоне падает. (см. строку с комментарием). try/catch ничего не показывает. Версия андроида на планшете 4.2, на смартфоне 4.4

В чём может быть дело? Код:

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    // Check to see if we have a frame in which to embed the details
    // fragment directly in the containing UI.
    View detailsFrame = getActivity().findViewById(R.id.details);

    mDualPane = detailsFrame != null && detailsFrame.getVisibility() == View.VISIBLE;

    if (savedInstanceState != null) {
        // Restore last state for checked position.
        mCurCheckPosition = savedInstanceState.getInt("curChoice", 0);
    }

    Fragment f = map.get(mCurCheckPosition);
    f = new DeviceUARTFragment(getActivity() , ftD2xx);

    map.put(mCurCheckPosition, f);
    Bundle args = new Bundle();
    args.putInt("index", mCurCheckPosition);
    f.setArguments(args);

    currentFragment = f;

    FragmentTransaction ft = getFragmentManager().beginTransaction();
    ft.replace(R.id.details, f);
    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
    ft.commit(); /* на этой строчке приложение падает*/

    old_index = currect_index;
}

Обновление

В Манифесте прописан android:targetSdkVersion="19" - сделал, не помогло.

Ссылка на логи: https://yadi.sk/i/bl425-WBcoUjX (не помещается текст здесь).

Ответы

▲ 1

Для обычных телефонов слои нужно хранить в папках:

  • /res/layout/
  • /res/layout-land/

// первая папка для портретной ориентации, вторая для альбомной.

Для планшетов 7 и 10 дюймов папки будут следующие:

  • /res/layout-sw600dp/
  • /res/layout-sw600dp-land/

и

  • /res/layout-sw700dp/
  • /res/layout-sw700dp-land/

соответственно.

Если рассмотреть на примере слоя my_super_layout.xml, то его расположение в папках будет таким:

  • (телефон) - /res/layout/my_super_layout.xml
  • (телефон) - /res/layout-land/my_super_layout.xml
  • (7" планшет) - /res/layout-sw600dp/my_super_layout.xml
  • (7" планшет) - /res/layout-sw600dp-land/my_super_layout.xml
  • (10" планшет) - /res/layout-sw700dp/my_super_layout.xml
  • (10" планшет) - /res/layout-sw700dp-land/my_super_layout.xml

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

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

UPD1:

Добавь в манифесте следующее:

<uses-sdk
            android:minSdkVersion="11"
            android:targetSdkVersion="21" />

// Это даст возможность запускаться на Android 3.0 - Android 5.0.

И после чего именно вылетает приложение на смартфоне? Я бы еще отследил при помощи собственных логов.
Расставь в коде

Log.v/i/e/w/d("myLogs", "после действия чего-то");

v/i/e/w/d - разные типы сообщений. Выбрать нужно одно.
А в LogCat создать нужно будет фильтр с параметром "myLogs". В итоге в фильтре можно будет увидеть, что выполнено, а после чего "крашится"/crash приложение. А так же можно вывести отдельно фильтр с "errors" (есть в выпадающем списке).

Здесь информация по Log - кликни по мне //Google источник