2013-07-02 19 views
5

質問に関連してSOに投稿された様々な質問がありますが、どれも解決策を提示していません。 fragment activityには4つのタブがあり、各タブにはそれぞれfragmentがあります。私は別のfragmentに入っています。ときに私はタブに切り替わるときに重複して、両方が表示されます。私はCだと新しいフラグメントの内部フラグメントフラグメントが別のフラグメントに重複する

mActivity.newFragment(new Select_Group_Fragment(), "Group"); 

を呼び出す

<Button 
    android:id="@+id/checkBal" 
    android:layout_width="fill_parent" 
    android:layout_height="45dp" 
    android:clickable="false" 
    android:gravity="left|center_vertical" 
    android:typeface="serif" /> 

<View 
    android:layout_width="fill_parent" 
    android:layout_height="2dp" 
    android:layout_marginLeft="5dp" 
    android:layout_marginRight="5dp" 
    android:layout_marginTop="2dp" 
    android:background="@color/green" /> 

<FrameLayout 
    android:id="@+id/realtabcontent" 
    android:layout_width="match_parent" 
    android:layout_height="0dip" 
    android:layout_weight="1" /> 

<android.support.v4.app.FragmentTabHost 
    android:id="@android:id/tabhost" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" > 

    <FrameLayout 
     android:id="@android:id/tabcontent" 
     android:layout_width="0dp" 
     android:layout_height="0dp" 
     android:layout_weight="0" /> 
</android.support.v4.app.FragmentTabHost> 

public class Tab_Activity extends FragmentActivity { 

FragmentTabHost mHost; 
Button balance; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.tabs); 

    balance = (Button) findViewById(R.id.checkBal); 
    mHost = (FragmentTabHost) findViewById(android.R.id.tabhost); 
    mHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent); 

    mHost.addTab(mHost.newTabSpec("Home").setIndicator("Home"), 
      Home_Fragment.class, null); 
    mHost.addTab(mHost.newTabSpec("Number").setIndicator("Send to number"), 
      Number_Fragment.class, null); 
    mHost.addTab(
      mHost.newTabSpec("Contact").setIndicator("Send to contacts"), 
      Contact_Fragment.class, null); 
    mHost.addTab(mHost.newTabSpec("Group").setIndicator("Send to groups"), 
      Group_Fragment.class, null); 

    mHost.setOnTabChangedListener(new OnTabChangeListener() { 

     @Override 
     public void onTabChanged(String tabId) { 
      // TODO Auto-generated method stub 

      if (tabId.equalsIgnoreCase("Home")) { 

       Home_Fragment home = new Home_Fragment(); 

       FragmentManager manager = getSupportFragmentManager(); 
       FragmentTransaction ft = manager.beginTransaction(); 
       ft.replace(R.id.realtabcontent, home, "Home"); 
       ft.commit(); 

      } 

      if (tabId.equalsIgnoreCase("Number")) { 

       Number_Fragment number = new Number_Fragment(); 

       FragmentManager manager = getSupportFragmentManager(); 
       FragmentTransaction ft = manager.beginTransaction(); 
       ft.replace(R.id.realtabcontent, number, "Number"); 
       ft.commit(); 

      } 
      if (tabId.equalsIgnoreCase("Contact")) { 

       Contact_Fragment contact = new Contact_Fragment(); 

       FragmentManager manager = getSupportFragmentManager(); 
       FragmentTransaction ft = manager.beginTransaction(); 
       ft.replace(R.id.realtabcontent, contact, "Contact"); 
       ft.commit(); 
      } 

      if (tabId.equalsIgnoreCase("Group")) { 

       Group_Fragment group = new Group_Fragment(); 

       FragmentManager manager = getSupportFragmentManager(); 
       FragmentTransaction ft = manager.beginTransaction(); 

       ft.replace(R.id.realtabcontent, group, "Group"); 
       ft.commit(); 
      } 

     } 
    }); 

} 




public void newFragment(Fragment fragment, String tag) { 

    FragmentManager manager = getSupportFragmentManager(); 
    FragmentTransaction ft = manager.beginTransaction(); 
    // 
    if (tag.equalsIgnoreCase("Group")) 
     ft.remove(new Group_Fragment()); 
    else 
     ft.remove(new Contact_Fragment()); 
    ft.replace(R.id.realtabcontent, fragment); 
    ft.addToBackStack(null); 
    ft.commit(); 

} 

public void updateContacts(ArrayList<String> cList) { 

    FragmentManager manager = getSupportFragmentManager(); 

    Contact_Fragment contactFrag = (Contact_Fragment) manager 
      .findFragmentByTag("Contact"); 
    contactFrag.updateData(cList); 

} 

} 

:ここ

コード(XML)であります別の断片からの断片をエイリング私はみんな

私がフラグメントに見てきたすべてのものから
+0

前のビューを除去するために画像が重なり – dymmeh

+0

overlappレイアウトによって引き起こされる可能性が表示するのに有用かもしれません。ビューが表示される順番を指定せずに 'RelativeLayout'を使用すると' FrameLayout'という予期しない動作が発生する可能性があります。 –

+0

@dymmeh Screenshot attached – moDev

答えて

0

、すなわちグーグルIO、StackOverflowの、などを助けてくださいnew fragment方法

Overlapped screenshot

Tab_ActivityででaddToBackStackを追加する必要がありますこれはそれを処理する方法ではありません。アクティビティは、どのフラグメントがアクティブであるかを制御する必要があります。フラグメントは、フラグメント制御のためのアクティビティに遅延する必要があります。フラグメント間のデータをアクティビティに渡す必要があるかもしれません。 Googleの開発者は、フラグメント間の通信を強く推奨しません。フラグメントは画面のサブセットを意味します。

オーバーレイは、同時に2つのフラグメントをアクティブにしているようです。

FYI。 1つのアクティビティー内で複数のフラグメントを操作するには、フラグメント・トランザクションを使用するのが最善です。 XMLからフラグメントを開始するアクティビティを開始することは、フラグメントトランザクションによって実際には手がけられません。

これが役に立ちます。 AndroidMainifest.xml変化を

0

android:name=".activities.youactivityname" 
android:configChanges="screenSize|orientation" 
0
layout.removeAllViews(); 

利用これは

関連する問題