2013-04-10 16 views
18

Tôi có thanh tác vụ với 3 tab, mỗi tab sẽ mở một đoạn. Tab thứ ba, "Catalog", có một danh sách: enter image description hereCác mảnh vỡ chồng lên nhau

Khi tôi bấm vào một mục nó sẽ mở ra đoạn khác, mà không phải là một phần của thanh tác vụ:

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

Đây là những gì nó trông giống như sau đó: enter image description here

Từ thời điểm này, nếu tôi đi đến tab khác và sau đó quay trở lại tab Catalog, tôi thấy 2 mảnh trước chồng chéo nhau:

enter image description here

Làm cách nào để ngăn điều đó xảy ra?

Trả lời

4

Bạn có thể quản lý các đoạn của mình bằng cách tìm kiếm chúng theo thẻ. Khi thêm đoạn để backstack thêm tên TAG

transaction.addToBackStack("myCustomFragmentTag"); 

Nếu bạn muốn tiêu diệt Fragment bất cứ nơi nào trong ứng dụng:

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

Bạn có thể thử ghi đè lên một số hành vi như vậy dòng mã này sẽ tiêu diệt khởi Fragment cuối cùng

getFragmentManager().popBackStack(); 
+0

Tôi đã cố gắng sử dụng nó như sau: 'transaction.addToBackStack (" CategoryFragment ");' và sau đó cố gắng sử dụng phần còn lại của mã trong phương thức onResume và onTabReselected. Nhưng tôi vẫn thấy những mảnh vỡ chồng lên nhau ... – Igal

+0

tôi có cùng một vấn đề trong ứng dụng demo của tôi ... – Jayesh

+0

cho tôi biết mã của bạn trong pastebin.com .... – Jayesh

0

Bạn có thể thử như thế này cho các tab ..

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

Trong layout xml của bạn

<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

Thiết lập một nền để bố trí đoạn sẽ sửa lỗi này.

+0

Đây phải là một nhận xét. –

+0

android: background = "? Android: colorBackground" –

+0

bạn cũng phải thêm vào bên dưới để các nhấp chuột không được chuyển đến đoạn cũ ==> android: clickable = "true" –

1

Theo câu hỏi này: Android: fragments overlapping issue

tất cả bạn cần là chỉ cần thiết lập một màu nền của bạn trong tập tin XML

Giải quyết vấn đề này.