我已将一个后台服务添加到我的应用程序,该应用程序会在将新项目添加到我的应用程序时创建通知。当按下通知时,用户被带入应用程序,意图传递一个对象,允许应用程序选择新添加的项目。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是假的因此它在新活动中显示交易并按预期工作。 在平板电脑上时,它会进入else,但如果片段不可见,它永远不会进入最后。
当在平板电脑上运行该应用程序时,它会进入第二个,但在其之后该片段仍然不可见。
在应用程序中的其他位置使用相同的方法(交易未在意图中传递时)并且按预期工作。
从文档 - 这里提供的参数将保留在片段销毁和创建。这是否意味着在应用程序被杀之前这个包被保留了下来?举例来说,很多通知都是由用户点击的,所有的包都会被保留下来? – bencallis 2012-03-13 16:58:30
如果您通过remove或replace事务删除片段,则片段会被破坏(所以包会丢失),但是如果您旋转设备并重新连接片段,则会保留该片段。每个片段只能调用一次setArguments,因此为了处理多个通知,您可以用新的片段替换旧的片段。 – smith324 2012-03-13 19:24:52
谢谢。我已经设法按照你的建议来开展工作。 – bencallis 2012-03-13 21:56:58