显示在另一个片段后的一个片段的看法

时间:2015-08-22 09:22:08

标签: android android-fragments android-framelayout

我的应用程序中有多个片段,好吧我可以说我有片段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();

            }
        });

5 个答案:

答案 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。