Фрагмент Android не виден - PullRequest
0 голосов
/ 10 марта 2012

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

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

В основном задании onCreate я проверяю намерение и проверяю, прошел ли элемент, и отображаю его, если он был. На телефоне это работает нормально, но на планшете правый фрагмент не виден и, следовательно, элемент не может быть показан.

Это то, что я называю в конце onCreate (я пробовал это в onStart и onResume)

Bundle data = queryIntent.getExtras();
    if  (data!=null){
        Deal deal = data.getParcelable("notificationDeal");
        if (deal!=null){
            onDealSelected(deal);
        }
    }

Метод onDealSeletced выполняет следующее

public void onDealSelected(Deal deal) {
    if (!mDualFragments){
        Intent showDealDetails = new Intent(getApplicationContext(), DealDetailsActivity.class);
        showDealDetails.putExtra("Deal", deal);
        showDealDetails.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(showDealDetails);
        Log.d("OnDealSelected", "1");
    }
    else{ // must be tablet
        if (dealDetailsFragment == null)
            dealDetailsFragment = (DealDetailsFragment) getFragmentManager().findFragmentByTag("dealDetailsFragment");
        if (!dealDetailsFragment.isVisible()){
            FragmentTransaction transaction = getFragmentManager().beginTransaction();
            transaction.replace(R.id.right_fragment_container, dealDetailsFragment);
            transaction.setTransitionStyle(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
            transaction.commit();
            getFragmentManager().executePendingTransactions(); // ensure it is done before we call update deal!
            Log.d("OnDealSelected", "2");
        }
        if (dealDetailsFragment.isVisible())    {
            dealDetailsFragment.updateDeal(deal);
            Log.d("OnDealSelected", "3");
        }
    }
}

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

При запуске приложения на планшете оно переходит во второе, если, но после него фрагмент все еще не виден.

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

Ответы [ 2 ]

3 голосов
/ 13 марта 2012

Вы можете использовать setArguments (Bundle bundle) , чтобы передать данные фрагменту перед его присоединением (перед действием фиксации).Таким образом, когда Fragment инициализирует себя, он может вызвать getArguments и проанализировать пакет.Таким образом, вам не нужно беспокоиться о видимом фрагменте, он может создавать свои представления, когда будет готов.Полный фрагмент приведен во фрагменте Документы

0 голосов
/ 13 марта 2012

Попробуйте метод транзакции.add () и скройте предыдущий фрагмент. Я полагаю, ваш фрагмент будет виден сейчас.

        transaction.add(R.id.right_fragment_container, dealDetailsFragment);
...