2013-04-10 13 views
18

Mam pasek akcji z 3 zakładkami, każda zakładka otwiera fragment. Trzecia zakładka „Katalog”, ma listę: enter image description hereFragmenty zachodzące na siebie

Po kliknięciu na elemencie otwiera kolejny fragment, który nie jest częścią paska akcji:

public void onClick(View v) { 
    switch (v.getId()) 
    { 
    case R.id.category1:  
     Fragment cosmeticsFragment = new ActivityCosmetics(); 
     FragmentTransaction transaction = getFragmentManager().beginTransaction(); 

     transaction.replace(android.R.id.content, cosmeticsFragment); 
     transaction.addToBackStack(null); 

     transaction.setTransition(1); 

     transaction.commit(); 
     break; 
     ... 

To co wygląda jak potem: enter image description here

z tego punktu, jeśli pójdę do innej zakładki, a następnie powrócić do karty katalog, widzę 2 Poprzednia fragmenty nakładających się wzajemnie:

enter image description here

Jak mogę temu zapobiec?

Odpowiedz

4

Możesz zarządzać swoimi fragmentami, wyszukując je według znaczników. Podczas dodawania fragmentu backstack dodać nazwę znacznika

transaction.addToBackStack("myCustomFragmentTag"); 

Jeśli chcesz zniszczyć Fragment gdziekolwiek w aplikacji:

Fragment previousInstance = getFragmentManager().findFragmentByTag("myCustomFragmentTag"); 
       if (previousInstance != null) 
        transaction.remove(previousInstance); 

można spróbować zastąpić niektóre zachowania więc ta linia kodu „ll zniszczyć zainicjowany ostatni fragment

getFragmentManager().popBackStack(); 
+0

Próbowałem użyć go w następujący sposób: 'transaction.addToBackStack (" CategoryFragment ");', a następnie próbował wykorzystać resztę kodu w metodach onResume i onTabReselected. Ale nadal widziałem te fragmenty nakładające się ... – Igal

+0

Mam ten sam problem w mojej aplikacji demo ... – Jayesh

+0

pokaż mi swój kod w pastebin.com .... – Jayesh

0

można spróbować tak na kartach ..

public class Tabs extends TabActivity { 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_tabs); 
    Resources res = getResources(); // Resource object to get Drawables 
    TabHost tabHost = getTabHost(); // The activity TabHost 
    TabHost.TabSpec spec; // Resusable TabSpec for each tab 
    // Intent intent; // Reusable Intent for each tab 
    // Create an Intent to launch an Activity for the tab (to be reused) 
    Intent intent1 = new Intent().setClass(this, Social.class); 
    // Initialize a TabSpec for each tab and add it to the TabHost 
    spec = tabHost.newTabSpec("app_name").setIndicator("Practice", 
         res.getDrawable(R.drawable.tab_social)) 
        .setContent(intent1); 
    tabHost.addTab(spec); 
    tabHost.getTabWidget().getChildAt(0).setBackgroundResource(R.drawable.bbgg); 
    // Do the same for the other tabs 
    Intent intent2 = new Intent().setClass(this, Web.class); 
    spec = tabHost.newTabSpec("application").setIndicator("Application", 
         res.getDrawable(R.drawable.tab_web)) 
        .setContent(intent2); 
    tabHost.addTab(spec); 
    tabHost.getTabWidget().getChildAt(1).setBackgroundResource(R.drawable.bbgg); 
    Intent intent3 = new Intent().setClass(this, Catalog.class); 
    spec = tabHost.newTabSpec("toplinks").setIndicator("Top Links", 
         res.getDrawable(R.drawable.tab_catalog)) 
        .setContent(intent3); 
    tabHost.addTab(spec); 
    tabHost.getTabWidget().getChildAt(2).setBackgroundResource(R.drawable.bbgg); 
    tabHost.setCurrentTab(0); 
} 
} 

w układzie xml

<TabHost 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@android:id/tabhost" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 

    <LinearLayout 
android:id="@+id/LinearLayout01" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical"> 
    <TabWidget 
android:id="@android:id/tabs" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content"></TabWidget> 
<FrameLayout 
android:id="@android:id/tabcontent" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent"></FrameLayout> 
</LinearLayout> 
</TabHost> 
3

Ustawianie tła do fragmentu układu byłoby to naprawić.

+0

To powinien być komentarz. –

+0

android: background = "? Android: colorBackground" –

+0

również musisz dodać poniżej, więc kliknięcia nie zostaną przekazane do starego fragmentu ==> android: klikalny = "true" –