5

Ich möchte eine Swipe-Registerkarte Schnittstelle mit einem FragmentTabHost mit einem ViewPager erstellen. Bisher habe ich die Fragmente zum rutschen gebracht. Das einzige, was passiert, ist, dass die Fragmente in der Lage sind, hinter die Tabs zu gleiten, die deaktiviert/stecken und nicht funktioniert. Wie kann ich die Registerkarte "FragmentTabHost" mit dem ViewPager zum Wischen zwischen Tabs verwenden?mit einem FragmentTabHost mit einem ViewPager

Ich habe versucht, FragmentTabHost ohne den Viewpager, es funktioniert gut, aber es funktioniert einfach nicht mit dem Viewpager.

hier ist ein Screenshot von dem, was es sieht aus wie: enter image description here

Haupt Java-Quellcode:

import java.util.List; 
import java.util.Vector; 

import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentPagerAdapter; 
import android.support.v4.app.FragmentTabHost; 
import android.support.v4.view.ViewPager; 



public class MainActivity extends FragmentActivity { 
private FragmentTabHost mTabHost; 
private ViewPager pager; 
private MyPagerAdapter adapter; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    mTabHost = (FragmentTabHost)findViewById(android.R.id.tabhost); 

     pager = (ViewPager) findViewById(R.id.viewpager);         
     List<Fragment> fragments = new Vector<Fragment>(); 
     fragments.add(Fragment.instantiate(this, BatteryFragment.class.getName())); 
     fragments.add(Fragment.instantiate(this, DeviceFragment.class.getName())); 
     fragments.add(Fragment.instantiate(this, NetworkFragment.class.getName()));   
     adapter = new MyPagerAdapter(getSupportFragmentManager(),  fragments); 

     pager.setAdapter(adapter); 

     mTabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent); 

     mTabHost.addTab(mTabHost.newTabSpec("battery").setIndicator("Battery", 
       getResources().getDrawable(R.drawable.ic_battery_tab)), 
       BatteryFragment.class, null); 
     mTabHost.addTab(mTabHost.newTabSpec("network").setIndicator("Network", 
       getResources().getDrawable(R.drawable.ic_network_tab)), 
        NetworkFragment.class, null); 
     mTabHost.addTab(mTabHost.newTabSpec("device").setIndicator("Device", 
       getResources().getDrawable(R.drawable.ic_device_tab)), 
       DeviceFragment.class, null); 




} 


public class MyPagerAdapter extends FragmentPagerAdapter { 
    private List<Fragment> fragments; 

    public MyPagerAdapter(FragmentManager fm, List<Fragment> fragments) { 
     super(fm); 
     this.fragments = fragments; 
    }  

    @Override 
    public Fragment getItem(int arg0) { 
     // TODO Auto-generated method stub 
     return this.fragments.get(arg0); 
    } 

    @Override 
    public int getCount() { 
     // TODO Auto-generated method stub 
     return this.fragments.size(); 
    } 

} 


} 

XML-Code:

<LinearLayout 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <TabWidget 
     android:id="@android:id/tabs"    
     android:orientation="horizontal" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="0"/>  

    <FrameLayout 
     android:id="@android:id/tabcontent" 
     android:layout_width="0dp" 
     android:layout_height="0dp" 
     android:layout_weight="0"/> 

    <FrameLayout 
     android:id="@+id/realtabcontent" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" /> 

    <android.support.v4.view.ViewPager 
     android:id="@+id/viewpager" 
     android:layout_width="fill_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1"/>   

</LinearLayout> 

</android.support.v4.app.FragmentTabHost> 
+0

Wie haben Sie implementiert? Ich möchte fragmenttabhost mit viewpager tun, aber keine Beispiele finden. –

Antwort

1

Sie folgendes zu Ihrem Code hinzu:

   pager.setOnPageChangeListener(new OnPageChangeListener() { 

       @Override 
       public void onPageSelected(int arg0) { 
        // TODO Auto-generated method stub 
        mTabHost.setCurrentTab(arg0); 
       } 

       @Override 
       public void onPageScrolled(int arg0, float arg1, int arg2) { 
        // TODO Auto-generated method stub 

       } 

       @Override 
       public void onPageScrollStateChanged(int arg0) { 
        // TODO Auto-generated method stub 

       } 
      }); 

Das Problem ist, wenn Sie die Fragmente wischen gibt es keine Möglichkeit für Registerkarten, es zu wissen, indem Sie so durch den obigen Code, können Sie dies zum Funktionieren bringen. Ich hatte das gleiche Problem, aber durch diese gelöst.Hoff das hilft.