2015-11-02 71 views
1

我不能代替片段是这样的:在第一加入是否可以替换使用布局XML创建的片段?

A2Fragment a2Fragment = new A2Fragment(); 
FragmentTransaction transaction = getChildFragmentManager().beginTransaction(); 
transaction.addToBackStack(null); 
transaction.replace(R.id.fragment_mainLayout, a2Fragment).commit(); 

第二片段。我已经尝试了很多解决方案,但总是发生同样的情况。我现在读到,不可能替换从布局XML文件添加的片段,并且它应该以编程方式添加,以便可以替换它。这是真的?

我现在在onCreateView中尝试了这一点,并开始工作。

Context context = getActivity(); 
LinearLayout base = new LinearLayout(context); 
base.setOrientation(LinearLayout.VERTICAL); 
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT); 
base.setLayoutParams(params); 
TextView text = new TextView(context); 
text.setGravity(Gravity.CENTER); 
String title; 
text.setText("Pager: "); 
text.setTextSize(20 * getResources().getDisplayMetrics().density); 
text.setPadding(20, 20, 20, 20); 
params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); 
text.setLayoutParams(params); 
FrameLayout layout = new FrameLayout(getActivity()); 
layout.setId(fragmentId); 
params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 0); 
params.weight = 1; 
layout.setLayoutParams(params); 
layout.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     FragmentManager manager = getFragmentManager(); 
     FragmentTransaction transaction = manager.beginTransaction(); 
     transaction.replace(fragmentId,new A2Fragment()); 
     transaction.addToBackStack(null); 
     transaction.commit(); 
    } 
}); 
layout.addView(text); 
base.addView(layout); 
return base; 
+1

为什么不直接使用FrameLayout里包含您的片段为两个片段?初始化您的活动以最初显示一个片段,然后当您想要显示第二个片段时,按照上述说明进行操作? –

+0

我已经试过这个,我得到了同样的结果。第二个出现在第一个。 –

+0

您应该使用getSupportFragmentManager()在您的活动中执行所有片段事务,而不是在Fragment中执行事务,因为它看起来像您在上面做的那样。当然,除非你的目标是显示片段本身的一个片段 –

回答

1

您可以在xml中创建一个片段,然后以编程方式将其替换。

  1. 创建XML。这个XML只包含一个片段。您可以使用通过引用其完全限定的类名创建的片段。

    <RelativeLayout 
        xmlns:android="http://schemas.android.com/apk/res/android" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" > 
    
        <fragment 
         android:id="@+id/fragment_container" 
         android:layout_centerHorizontal="true" 
         android:layout_width="match_parent" 
         android:layout_height="match_parent" 
         android:name="com.yourorg.fragment.EmptyFragment" /> 
    
    </RelativeLayout> 
    
  2. 使用片段事务来更改片段。

    public void swapContentFragment(Fragment fragment) { 
    
        FragmentTransaction transaction = mFragmentManager.beginTransaction(); 
        transaction.replace(R.id.fragment_container, fragment, "tagname"); 
        transaction.addToBackStack("tagname"); 
        transaction.commitAllowingStateLoss(); 
    } 
    
相关问题