2016-11-24 107 views
2

我有一个问题,即每当我打开一个新的片段从另一个片段它打开,但是当我回来的时候回来按钮,那么为什么它保存了前一个片段的背景视图,如果我添加了这个一段代码该片段如果片段后android中的片段

(container != null) { 
     container.removeAllViews(); 
    } 

然后它得到了整个屏幕,其中i希望它是工具栏下的,它得到了它和工具栏未示出,有时应用也停止。 我是碎片新手,所以请以平静详细的方式回答我的问题。 我已经添加了一个如何显示屏幕的流程,除了第一个屏幕外,这个屏幕看上去与第二个屏幕看上去部分一样。 this is the flow of all the screensthis is the screen when flow goes from fourth to second fragment, partial scrren visibility problem as i want to show the background fully only and not the table layout onewhich is appearing over it

我使用此代码上的按钮

Addhearingnewfrag fragment = new Addhearingnewfrag(); 
      FragmentManager fragmentManager = getActivity().getSupportFragmentManager(); 
      FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
      fragmentTransaction.replace(R.id.contentFragment, fragment); 
      fragmentTransaction.addToBackStack(null); 
      fragmentTransaction.commit(); 
     } 
    }); 
+0

样品导航抽屉例子是否要删除以前的片段,这样,当你回去是不可见的? – SaNtoRiaN

+0

这取决于您将碎片“添加”或“替换”到主容器的方式。如果使用“添加”,则将新片段添加到前一个片段,但如果使用替换,则会将新片段替换为新片段。 –

+0

你能显示你的完整代码吗? – Sachin

回答

1

需要的任何其他颜色我怎么一回事,因为你正在使用错误的片段经理想这个问题。如果从另一个片段打开片段,你应该使用

getChildFragmentManager()

,而不是

getActivity().getSupportFragmentManager()

UPDATE

public class MyActivity implements Activity implements ChangeFragListener{ 

public interface ChangeFragListener{ 
    change(String id); 
}    

@Override 
public void change(String id){ 
    ... 
    if(id.equals("addxx")){ 
      Addhearingnewfrag fragment = new Addhearingnewfrag(); 
      FragmentManager fragmentManager = getSupportFragmentManager(); 
      FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
      fragmentTransaction.replace(R.id.contentFragment, fragment); 
      fragmentTransaction.addToBackStack(null); 
      fragmentTransaction.commit(); 
     } 
    }); 
    } 
} 

} 

XFRagment.java

public XFragment extends Fragment{ 
    private ChangeFragListener listener; 

    protected void onCreate(Bundle savedInstanceState) { 
     listener = (ChangeFragListener)getActivity(); 
    } 

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 

btn.setOnClickListener(new View.OnClickListener() 
{ 
    @Override 
    public void onClick(View v) 
    { 
     listener.change("fromOtherId"); 
    } 
}); 

    } 
} 

您也可以在其他片段中使用此接口。除非一个人是另一个孩子,否则你不应该直接替换其他片段中的片段。

更新 - 2

审查项目的主要问题是因为片段container.For例子之后;您将家庭片段添加到R.id.frame。但是,您将其他片段替换为R.id.drawer_layout。并且R.id.drawer_layout是对您的导航抽屉没有片段容器的引用。

此外,R.id.frame看起来不像片段容器。它具有视图组件。这里有与片段

+1

我用你的方式,但应用程序停止和logcat显示此错误:进程:com.orion.android.mylawyerdiary,PID:15511 java.lang.IllegalArgumentException:没有找到id为id 0x7f0d00aa – Annie

+0

这是R.id.contentFragment当前片段持有人视图? – mismanc

+0

内容片段是用于加载片段的帧布局的ID – Annie

0

的点击片段添加这是因为你当前的片段背景是透明的。

这种情况发生时,你使用:

FragmentTransaction.addToBackStack(String) 

,因为以前的片段保持,所以当你推回去,你可以回到那里。

的解决方法是指定:

android:background="@android:color/white" 

,或者你在你的片段布局父标签

+0

我曾经使用这段代码,它没有任何字符串Addhearingnewfrag片段= new Addhearingnewfrag(); // FragmentManager fragmentManager = getActivity()。getSupportFragmentManager(); // FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); // fragmentTransaction.replace(R.id.contentFragment,fragment); // fragmentTransaction.addToBackStack(null); // fragmentTransaction.commit(); //} //}); – Annie

+0

你不需要输入字符串,addToBackStack(空)可能是很好,只是值得关注的是使用添加片段,而更换和设置您的布局的背景=白色 – Farhan

+0

我用addToBackStack但仍是问题是有@Farhan – Annie