menggunakan FragmentTabHost dengan ViewPager

Saya ingin membuat antarmuka tab gesek menggunakan FragmentTabHost dengan ViewPager. Sejauh ini saya sudah mendapatkan Fragmen untuk digeser. Satu-satunya hal yang terjadi adalah fragmen tersebut dapat meluncur ke belakang tab yang dinonaktifkan/macet dan tidak berfungsi. Bagaimana cara membuat tab FragmentTabHost berfungsi dengan ViewPager untuk menggeser antar tab?

Saya mencoba menggunakan FragmentTabHost tanpa viewpager, ini berfungsi dengan baik, tetapi tidak berfungsi dengan viewpager.

berikut screenshot tampilannya: masukkan deskripsi gambar di sini

Kode sumber Java utama:

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

}


}

Kode XML:

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

comment
Bagaimana Anda menerapkannya? Saya ingin melakukan fragmenttabhost dengan viewpager tetapi tidak dapat menemukan sampel apa pun.   -  person Prashanth Debbadwar    schedule 08.01.2016
comment
Dengan pendekatan ini, fragmen ditambahkan dua kali. Satu karena FragmentTabHost dan satu lagi karena ViewPager Adapter.   -  person Shan Xeeshi    schedule 18.09.2018


Jawaban (1)


tambahkan yang berikut ke kode Anda:

              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

                }
            });

masalahnya adalah ketika Anda menggesek fragmen tidak ada cara bagi tab untuk mengetahuinya, dengan menentukannya melalui kode di atas, Anda dapat membuat ini berfungsi. Saya memiliki masalah yang sama tetapi diselesaikan melalui ini. Semoga ini bisa membantu.

person karan vs    schedule 01.02.2015