Я добавил фоновое обслуживание к моему приложению, которое создает заметку при добавлении нового элемента в мое приложение. При нажатии уведомления пользователь вводится в приложение, и цель передает объект, который позволяет приложению выбирать вновь добавленный элемент.Фрагмент Android не отображается
Приложение предназначено как для мобильных телефонов, так и для планшетов. При работе на телефонах элемент отображается в отдельном действии, когда на планшете используется макет двойного фрагмента, и элемент отображается на правом фрагменте.
В основном действии 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 ложна и, следовательно, он показывает сделку в новой деятельности и работает, как ожидалось. Когда на планшете он переходит в другое, однако он никогда не попадает в финал, если в качестве фрагмента не видно.
При запуске приложения на планшете он переходит во второй, если после него фрагмент все еще не отображается.
Тот же метод используется в других точках приложения (когда сделка не проходит через намерение) и работает должным образом.
Из документации - Аргументы, предоставленные здесь, будут сохранены через уничтожение фрагмента и создание. Означает ли это, что пакет сохраняется до тех пор, пока приложение не будет убито? Скажем, например, много уведомлений, которые пользователь нажимает, будут также сохранены все связки? – bencallis
Если вы удалите фрагмент с помощью операции удаления или замены, фрагмент будет уничтожен (так что пакет потерян), но если вы повернете устройство, и фрагмент будет снова подключен, то пакет будет сохранен. setArguments можно вызывать только один раз для каждого фрагмента, поэтому для обработки нескольких уведомлений вы можете просто заменить старый фрагмент на новый. – smith324
Спасибо. Мне удалось заставить его работать после вашего совета. – bencallis