Я добавил в приложение фоновый сервис, который создает уведомление при добавлении нового элемента в мое приложение. При нажатии на уведомление пользователь попадает в приложение и намерение передает объект, который позволяет приложению выбрать вновь добавленный элемент.
Приложение для мобильных телефонов и планшетов. При работе на телефонах элемент отображается в отдельном упражнении, когда на планшете используется макет с двумя фрагментами, а элемент отображается в правом фрагменте.
В основном задании 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 ложно и, следовательно, показывает сделку в новом действии и работает как ожидалось.
На планшете он переходит в другое, но никогда не попадает в финал, если фрагмент не виден.
При запуске приложения на планшете оно переходит во второе, если, но после него фрагмент все еще не виден.
Тот же метод используется в других точках приложения (когда сделка не была достигнута в намерении) и работает должным образом.