2013-04-10 3 views
18

У меня есть панель действий с 3 вкладками, каждая вкладка открывает фрагмент. Третья вкладка, «Каталог», имеет список: enter image description hereФрагменты, перекрывающиеся друг с другом

При нажатии на элемент он открывает еще один фрагмент, который не является частью панели действий:

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

Это то, что это выглядит как после этого: enter image description here

с этого момента, если я иду на другую вкладку, а затем вернуться на вкладку Каталог, я вижу 2 предыдущие фрагменты накладываются друг на друга:

enter image description here

Как предотвратить это?

ответ

4

Вы можете управлять своими фрагментами, ища их по тегу. При добавлении фрагмента к backstack добавить имя тега

transaction.addToBackStack("myCustomFragmentTag"); 

Если вы хотите уничтожить фрагмент в любом месте применения:

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

Вы можете попытаться переопределить некоторое поведение так, эта строка коды будет уничтожить, инициализируется последний фрагментом

getFragmentManager().popBackStack(); 
+0

Я попытался использовать его следующим образом: 'transaction.addToBackStack (« CategoryFragment »);», а затем попытался использовать остальную часть кода в методах onResume и onTabReselected. Но я все еще видел, что эти фрагменты перекрываются ... – Igal

+0

У меня такая же проблема в моем демо-приложении ... – Jayesh

+0

показать мне свой код в pastebin.com .... – Jayesh

0

Вы можете попробовать, как это для вкладок ..

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

в макете 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

Установка фона для макета фрагмента будет это исправить.

+0

Это должен быть комментарий. –

+0

android: background = "? Android: colorBackground" –

+0

также вам нужно добавить ниже, так что клики не будут переданы в старый фрагмент ==> android: clickable = "true" –

1

По этому вопросу: Android: fragments overlapping issue

все, что вам нужно, это просто установить фоновый цвет к вашему в XML-файле

Решить эту проблему.

Смежные вопросы