今天测试下fragmenttabhost和viewpager的使用,主要注意的地方就是viewpager布局文件的位置和setup()方法的正确调用,关键代码如下:
activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
<FrameLayout
android:visibility="gone"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
<android.support.v4.app.FragmentTabHost
android:id="@android:id/tabhost"
android:layout_width="fill_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>
</LinearLayout>
MainActivity.java:
protected static final String TAG = "MainActivity";
private FragmentTabHost mTabHost = null;
private View indicator = null;
private ViewPager viewpager;
private List<Fragment> fragments=new ArrayList<Fragment>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main1);
viewpager=(ViewPager) findViewById(R.id.viewpager);
mTabHost = (FragmentTabHost) findViewById(android.R.id.tabhost);
mTabHost.setup(this, getSupportFragmentManager(),R.id.viewpager);
// 添加tab名称和图标
indicator = getIndicatorView("我的联系人", R.layout.mycontact_indicator);
mTabHost.addTab(mTabHost.newTabSpec("myContact")
.setIndicator(indicator), FirstFragment.class, null);
// 添加tab名称和图标
indicator = getIndicatorView("通讯录", R.layout.mycontact_indicator);
mTabHost.addTab(mTabHost.newTabSpec("tongxun").setIndicator(indicator),
SecondFragment.class, null);
// 添加tab名称和图标
indicator = getIndicatorView("特别关心", R.layout.mycontact_indicator);
mTabHost.addTab(mTabHost.newTabSpec("care").setIndicator(indicator),
ThirthFragment.class, null);
fragments.add(new FirstFragment());
fragments.add(new SecondFragment());
fragments.add(new ThirthFragment());
viewpager.setAdapter(new MyPageAdapter(getSupportFragmentManager()));
mTabHost.setOnTabChangedListener(new OnTabChangeListener() {
@Override
public void onTabChanged(String tabId) {
Log.e(TAG, tabId);
// FirstFragment fragment = (FirstFragment) getSupportFragmentManager().getFragments().get(0);
if(tabId.equals("myContact")){
viewpager.setCurrentItem(0);
}else if(tabId.equals("tongxun")){
viewpager.setCurrentItem(1);
}else if(tabId.equals("care")){
viewpager.setCurrentItem(2);
}
}
});
viewpager.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int arg0) {
// mTabHost.getTabWidget().setDescendantFocusability(arg0);
mTabHost.setCurrentTab(arg0);
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
});
}
private View getIndicatorView(String name, int layoutId) {
View v = getLayoutInflater().inflate(layoutId, null);
TextView tv = (TextView) v.findViewById(R.id.tabText);
tv.setText(name);
return v;
}
@Override
protected void onDestroy() {
super.onDestroy();
mTabHost=null;
}
class MyPageAdapter extends FragmentPagerAdapter{
public MyPageAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int arg0) {
return fragments.get(arg0);
}
@Override
public int getCount() {
return fragments.size();
}
}
fragment:
public class FirstFragment extends Fragment {
public ViewPager viewPager;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
TextView tv=new TextView(getActivity());
tv.setText("第一个fragment");
return tv;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
}
}
主要就是对viewpager滑动和tab点击选择时进行监听判断。