私のアプリケーションに新しいアイテムが追加されたときに通知を作成する、自分のアプリケーションにバックグラウンドサービスを追加しました。通知を押すと、ユーザーはアプリケーションに入り、インテントはオブジェクトに渡され、アプリケーションは新しく追加されたアイテムを選択できます。Androidのフラグメントが表示されない
携帯電話とタブレットの両方のアプリケーションです。電話機で実行すると、アイテムは別のアクティビティで表示されます。タブレット上では、デュアルフラグメントレイアウトが使用され、アイテムは右側のフラグメントに表示されます。
主なアクティビティonCreate私はインテントをチェックし、アイテムが通過しているかどうかをチェックし、アイテムがあればそれを表示します。これは電話機で正常に動作していますが、タブレットでは右の断片が見えないので項目を表示できません。
これは私が(私はONSTARTとonResumeでそれをしようとした)のonCreateの最後で呼んで
Bundle data = queryIntent.getExtras();
if (data!=null){
Deal deal = data.getParcelable("notificationDeal");
if (deal!=null){
onDealSelected(deal);
}
}
スマートフォンmDualFragments上で次の
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");
}
}
}
を行いonDealSeletced方法が偽でありますそれは新しい活動の中で取引を示し、期待どおりに働く。 タブレット上では、それはelseに入りますが、フラグメントが表示されていない場合は決して最終には入りません。
タブレット上でアプリケーションを実行すると、それでもフラグメントが表示されていない場合でも、タブレット上でアプリケーションが実行されます。
同じ方法がアプリケーションの他のポイントで使用されます(取引が意図内で実行されない場合)。期待どおりに機能しています。
ここから提供された引数はフラグメント破棄と作成の間に保持されます。これは、アプリケーションが終了するまでバンドルが保持されることを意味しますか?たとえば、ユーザーがクリックするとたくさんの通知が行われ、すべてのバンドルが保持されるとします。 – bencallis
削除または置換トランザクションを介してフラグメントを削除すると、フラグメントが破棄されるため(バンドルは失われます)、デバイスをローテーションしてフラグメントを再接続するとバンドルが保持されます。 setArgumentsはフラグメントごとに1回だけ呼び出すことができます。したがって、複数の通知を処理するには、古いフラグメントを新しいものに置き換えることができます。 – smith324
ありがとうございます。私はあなたのアドバイスに従ってそれを働かせることができました。 – bencallis