2012-01-27 51 views
3

我想做一個非常簡單的應用程序,但有一個錯誤,我無法擺脫它。也許有人可以幫助我。Android碎片使方向變化重複TextView

我正在用ActionBar和3個選項卡進行一個活動。 Tabs下面是一個FrameLayout,我在其中放置了帶有TextView的碎片。所以當點擊一個標籤時,TextView的內容就會改變。 這工作正常,直到我改變方向。更改後有一個重複的TextView,我不知道它來自哪裏。這裏有一個更好的理解一幅圖片: Overlapping TextViews

這裏是我的活動:

package com.test; 
import android.app.ActionBar; 
import android.app.Activity; 
import android.app.FragmentTransaction; 
import android.app.ActionBar.Tab; 
import android.os.Bundle; 
import android.widget.Toast; 

public class ProblemActivity extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     ActionBar bar = getActionBar(); 
     bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

     String tab1 = "First Tab"; 
    bar.addTab(bar 
      .newTab() 
      .setText(tab1) 
      .setTabListener(
        new TabListener(new First()))); 

     String tab2 = "Second Tab"; 
    bar.addTab(bar 
      .newTab() 
      .setText(tab2) 
      .setTabListener(
        new TabListener(new Second()))); 

     String tab3 = "Third Tab"; 
    bar.addTab(bar 
      .newTab() 
      .setText(tab3) 
      .setTabListener(
        new TabListener(new Third()))); 
    } 

private class TabListener implements ActionBar.TabListener { 
    private MyFragment mFragment; 

    public TabListener(MyFragment fragment) { 
     this.mFragment = fragment; 
    } 

    public void onTabSelected(Tab tab, FragmentTransaction ft) { 
     ft.add(R.id.fragment_content, mFragment, null); 
    } 

    public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
     ft.remove(mFragment); 
    } 

    public void onTabReselected(Tab tab, FragmentTransaction ft) { 
     Toast.makeText(ProblemActivity.this, "Reselected!", Toast.LENGTH_SHORT) 
       .show(); 
    } 

} 

}

片段的:

public class First extends MyFragment { 

public First() { 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    View fragView = inflater.inflate(R.layout.tab1, container, false); 

    TextView tv = (TextView) fragView.findViewById(R.id.textView1); 
    tv.setText("First Tab"); 

    return fragView; 
} 

}

的main.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" > 


<FrameLayout 
    android:id="@+id/fragment_content" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

</LinearLayout> 

和Fragment's.xml的內容:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" > 

<TextView 
    android:id="@+id/textView1" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:gravity="center" 
    android:text="TextView" 
    android:textSize="35dp" /> 

</LinearLayout> 

這將是驚人的,如果一些能告訴我什麼,我作出錯誤的。 提前致謝!

編輯:我已經嘗試this proposed solution但我想使用類對象,以便我可以使用他們的方法。

編輯2:現在解決了問題。在我的活動中添加android:configChanges="keyboardHidden|orientation|screenSize"就足夠了。

+2

我認爲您應該自己添加解決方案作爲答案,並將其標記爲已接受。 – Malcolm 2012-01-28 09:53:21

回答

0

如果某個佈局出現問題,則可以獲得重疊視圖。這似乎發生在特別是如果你有一個片段。例如,片段中的視圖可以與包含佈局中的視圖重疊。

有時候這可以通過清理項目來解決(如果您使用的是Eclipse)。

2

由於OP已經解決了他的問題,但一直沒有積極的SO快一年了,這裏是裝有溶液的答案:


添加以下到Activity解決了這個問題:

android:configChanges="keyboardHidden|orientation|screenSize"