2013-07-02 2 views
5

Я знаю, что на вопрос SO есть вопрос, но ни один из них не дает мне решения. У меня 4 вкладки в fragment activity, и каждая вкладка имеет свой собственный fragment. Я вхожу в другой fragment внутри него. Когда я переключаюсь на вкладки, иногда получается перекрытие, и оба они видны.Фрагмент получается перекрытым на другом фрагменте

Вот код (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); 

} 

} 

Вызов фрагмента внутри нового фрагмента

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

, как я гр Alling фрагмент из другого фрагмента, мне нужно добавить addToBackStack в new fragment метод Tab_Activity

Overlapped screenshot

Пожалуйста, помогите ребята

+0

Изображение может быть полезным, чтобы показать перекрытие – dymmeh

+0

overlapp может быть вызван макетом. если вы используете 'RelativeLayout', не указав порядок, в котором будут отображаться представления, или' FrameLayout', это непредсказуемое поведение может произойти –

+0

@dymmeh Снимок экрана, прикрепленный – moDev

ответ

0

Из всего, что я видел на фрагментах, т.е. Google IO, StackOverflow, и т.д. . Это не способ справиться с этим. Активность должна контролировать, какой фрагмент (ы) активен. Фрагмент должен отложить до активности для контроля фрагментов. Возможно, вам придется передать данные между фрагментами в действие. Разработчики Google сильно препятствуют фрагментации фрагментации связи. Фрагменты предназначены для подмножества экрана.

Ваш оверлей выглядит так, как будто у вас одновременно есть 2 фрагмента.

FYI. Лучше всего использовать Fragment Transactions для управления несколькими фрагментами в рамках одного действия. Запуск операции, которая инициирует фрагмент из xml, не может быть эффективно обработан Fragment Transactions.

Надеюсь, это поможет.

0

В изменении AndroidMainifest.xml:

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

использование этого, чтобы удалить предыдущий вид

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

  • Нет связанных вопросов^_^