2

J'ai un problème avec mon application .. Je dois changer un fragment dans un onglet, mais quand je fais cela, le nouveau fragment se chevauchent sur l'ancien fragment. Ceci est mon code:ActionBarSherlock fragment chevauchant dans le même onglet

MainActivity:

public class MainActivity extends SherlockFragmentActivity { 

ViewPager mViewPager; 
TabsAdapter mTabsAdapter; 
TextView tabCenter; 
TextView tabText; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
      WindowManager.LayoutParams.FLAG_FULLSCREEN); 

    mViewPager = new ViewPager(this); 
    mViewPager.setId(R.id.pager); 

    setContentView(mViewPager); 
    ActionBar bar = getSupportActionBar(); 
    bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
    bar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE); 

    mTabsAdapter = new TabsAdapter(this, mViewPager); 

    mTabsAdapter.addTab(bar.newTab().setText("Home"), 
      FragmentTab1.class, createBundle("ft1")); 
    mTabsAdapter.addTab(bar.newTab().setText("FujiSan"), 
      FragmentTab2.class, null); 
} 

public static class TabsAdapter extends FragmentPagerAdapter implements 
     ActionBar.TabListener, ViewPager.OnPageChangeListener { 
    private final Context mContext; 
    private final ActionBar mActionBar; 
    private final ViewPager mViewPager; 
    private final ArrayList<TabInfo> mTabs = new ArrayList<TabInfo>(); 

    static final class TabInfo { 
     private final Class<?> clss; 
     private final Bundle args; 

     TabInfo(Class<?> _class, Bundle _args) { 
      clss = _class; 
      args = _args; 
     } 
    } 

    public TabsAdapter(SherlockFragmentActivity activity, ViewPager pager) { 
     super(activity.getSupportFragmentManager()); 
     mContext = activity; 
     mActionBar = activity.getSupportActionBar(); 
     mViewPager = pager; 
     mViewPager.setAdapter(this); 
     mViewPager.setOnPageChangeListener(this); 
    } 

    public void addTab(ActionBar.Tab tab, Class<?> clss, Bundle args) { 
     TabInfo info = new TabInfo(clss, args); 
     tab.setTag(info); 
     tab.setTabListener(this); 
     mTabs.add(info); 
     mActionBar.addTab(tab); 
     notifyDataSetChanged(); 
    } 

    @Override 
    public int getCount() { 
     return mTabs.size(); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     TabInfo info = mTabs.get(position); 
     return Fragment.instantiate(mContext, info.clss.getName(), 
       info.args); 
    } 

    @Override 
    public void onPageScrolled(int position, float positionOffset, 
      int positionOffsetPixels) { 
    } 

    @Override 
    public void onPageSelected(int position) { 
     mActionBar.setSelectedNavigationItem(position); 
    } 

    @Override 
    public void onPageScrollStateChanged(int state) { 
    } 

    @Override 
    public void onTabSelected(Tab tab, FragmentTransaction ft) { 
     Object tag = tab.getTag(); 
     for (int i = 0; i < mTabs.size(); i++) { 
      if (mTabs.get(i) == tag) { 
       mViewPager.setCurrentItem(i); 
      } 
     } 
    } 

    @Override 
    public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
    } 

    @Override 
    public void onTabReselected(Tab tab, FragmentTransaction ft) { 
    } 
} 

public static Bundle createBundle(String title) { 
    Bundle bundle = new Bundle(); 
    bundle.putString("title", title); 
    return bundle; 
} 
} 

J'ai deux onglets et j'ajouter à ces deux fragments. Cette la mise en page:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/home" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 

> 

<android.support.v4.view.ViewPager 
    android:id="@+id/pager" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" > 
</android.support.v4.view.ViewPager> 

Et voici le code de FragmentTab1:

public class FragmentTab1 extends SherlockFragment { 

static Context context; 

@Override 
public SherlockFragmentActivity getSherlockActivity() { 
    return super.getSherlockActivity(); 
} 

@Override 
public void onViewCreated(View view, Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 

} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    RelativeLayout view = (RelativeLayout) inflater.inflate(
      R.layout.fragmenttab1, container, false); 
    context = getActivity(); 

    Button guasti = (Button) view.findViewById(R.id.bGuasti); 
    Button segnala = (Button) view.findViewById(R.id.segnalaDisservizio); 
    guasti.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 

      Fragment newFragment = new FragmentTab2(); 
      FragmentTransaction transaction = getFragmentManager() 
        .beginTransaction(); 
      transaction.replace(R.id.frame1, newFragment, "new frsg"); 
      transaction.addToBackStack(null); 
      transaction.commit(); 
      getFragmentManager().executePendingTransactions(); 
     } 
    }); 

Avec une mise en page qui ont un frameLayout:

...omissis... 
    <FrameLayout 
    android:id="@+id/frame1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentTop="true" > 

</FrameLayout> 

Cette le résultat: en Thera rouge sont les composants du second fragment enter image description here

Répondre

1

Dans tous vos fichiers xml, doivent définir la couleur d'arrière-plan, il va résoudre le problème:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/home" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
> 

<FrameLayout 
android:id="@+id/frame1" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_alignParentBottom="true" 
android:layout_alignParentLeft="true" 
android:layout_alignParentRight="true" 
android:layout_alignParentTop="true" > 

Ajouter cette android:background="@android:color/black" pour la balise View vous avez défini.

Questions connexes