我的应用程序中有多个片段,好吧我可以说我有片段f1和f2 ..现在在f1我有imageview和按钮,现在如果点击按钮它会转到f2并显示f2,但在后台的视图f1仍然可见,任何人都可以告诉我的应用程序中的片段有什么问题,提前谢谢
片段1按钮的听众
Shopfragment是第二个片段
hp.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ShopFragment tf = new ShopFragment();
Bundle bundle = new Bundle();
tf.setArguments(bundle);
android.app.FragmentManager fm = getActivity().getFragmentManager();
android.app.FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.container_body, tf);
ft.setTransition(android.support.v4.app.FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.addToBackStack(null);
ft.commit();
}
});
答案 0 :(得分:0)
替换它而不是添加它。如下所示:
FragmentTransaction ft = getActivity().getFragmentManager().beginTransaction();
FragmentTwo f2 = new FragmentTwo();
ft.replace(R.id.container, f2);
ft.addToBackStack(null);
ft.commit();
答案 1 :(得分:0)
也许你使用了两个带有2个FrameLayout容器的片段,所以你替换了第二个片段,第一个片段没有被替换,它也是可见的。再次检查布局!
答案 2 :(得分:0)
尝试从背景中删除旧片段:
ShopFragment tf = new ShopFragment();
Bundle bundle = new Bundle();
tf.setArguments(bundle);
android.app.FragmentManager fm = getActivity().getFragmentManager();
android.app.FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.container_body, tf);
ft.setTransition(android.support.v4.app.FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
//oldFragment -> reference to old fragment
if(oldFragment != null){
ft.remove(oldFragment);
}
ft.addToBackStack(null);
ft.commit();
答案 3 :(得分:0)
向backstack添加片段会导致旧片段实例不被破坏。用于处理Android系统的后退按钮点击,通过撤消交易将用户带到旧片段。
在您的情况下,您应该在另一个交易中执行删除操作。因此android不会保留此事务的信息。我应该提醒一下,点击ft2上的后退按钮会给你一个没有片段的活动。
ShopFragment tf = new ShopFragment();
Bundle bundle = new Bundle();
tf.setArguments(bundle);
android.app.FragmentManager fm = getActivity().getFragmentManager();
android.app.FragmentTransaction ft = fm.beginTransaction();
ftRemove.remove(oldFragmentInstance);
ftRemove.commit();
android.app.FragmentTransaction ftAdd = fm.beginTransaction();
ftAdd.setTransition(android.support.v4.app.FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ftAdd.add(R.id.container_body, tf);
ftAdd.addToBackStack(null);
ftAdd.commit();
希望能解决你的问题
答案 4 :(得分:0)
确保您是否使用
android.support.v4.app.Fragment
用于第一次片段放置。如果您这样做,那么问题就在于此问题。 当您尝试使用不同的支持版本放置Fragment时,您将收到问题。
(即)如果你放置
android.app.Fragment
支持
上方的版本片段android.support.v4.app.fragment
支持版本片段。您将获得android.app.Fragment支持版本片段透明。
为了解决这个问题,请使用相同的支持版本片段。
关于两个支持版本的信息
<强> android.support.v4.app.Fragment 强>
android.support.v4.app.Fragment是android支持库中的Fragment类,它是一个兼容包,允许您在旧版本的Android上使用Android的一些较新功能。
<强> android.app.Fragment 强>
android.app.Fragment是Android SDK原生版本中的Fragment类。它是在Android 3(API 11)中引入的。
如果您想让您的应用使用片段,并希望在API 11之前定位设备,则必须使用android.support.v4.app.Fragment。但是,如果您只定位运行API 11或更高版本的设备,则可以使用android.app.Fragment。