2013-07-02 17 views
5

Wiem, że na pytanie SO związane jest pytanie, ale żadne z nich nie dostarcza mi rozwiązania. Mam 4 zakładki w fragment activity i każda zakładka ma swoją własną fragment. Przechodzę do innego fragment w środku. Kiedy przełączam się na karty, czasami się nakłada i oba są widoczne.Fragment się pokrywa się na innym fragmencie

Oto kod (XML):

<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); 

} 

} 

Wywołanie fragment wnętrza nowego fragmentu

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

jak ja c Alling fragment z innego fragmentu muszę dodać addToBackStack w new fragment metoda Tab_Activity

Overlapped screenshot

Proszę o pomoc chłopaki

+0

Obraz może być przydatne, aby pokazać nakładanie – dymmeh

+0

overlapp mogą być spowodowane przez układ. jeśli użyjesz 'RelativeLayout' bez określenia kolejności wyświetleń pojawi się lub' FrameLayout', to nieprzewidywalne zachowanie może wystąpić –

+0

@dymmeh Screenshot dołączony – moDev

Odpowiedz

0

od wszystkiego, co widziałem na fragmentach, czyli Google IO, StackOverflow, etc ., to nie jest sposób, aby sobie z tym poradzić. Działanie powinno kontrolować, który fragment (y) jest aktywny. Fragment powinien odroczyć się od aktywności dla kontroli fragmentów. Konieczne może być przekazanie danych między fragmentami do działania. Programiści Google zdecydowanie odradzają komunikację między fragmentami. Fragmenty mają być podzbiorem ekranu.

Twoja nakładka wygląda tak, jakbyś miała 2 fragmenty aktywne w tym samym czasie.

FYI. Najlepiej korzystać z Transakcji fragmentów, aby manipulować wieloma fragmentami w ramach jednej czynności. Rozpoczęcie działania, które inicjuje fragment z xml, naprawdę nie może zostać zmanipulowane przez Fragment Transactions.

Mam nadzieję, że to pomoże.

0

w zmianie AndroidMainifest.xml:

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

wykorzystanie tego, aby usunąć poprzedni widok

Powiązane problemy