您的位置:首页 > 移动开发

viewpager+FragmentAdapter实现App主界面Tab

2015-08-17 11:08 435 查看
viewpager+FragmentAdapter 实现可滑动的Fragment 管理的Tab App主界面

Fragment 作为内容区域 ;管理自己的布局中的控件,事件和逻辑。 减轻MainActivity 的代码冗余 MainActivity 只起到一个调度Fragment 的作用,Viewpager 实现了界面滑动

如果界面需要滑动则使用viewpager+FragmentAdapter 如果界面不需要滑动则使用 Fragment 请看这篇博客:

[androidFragment实现APP主界面Tab页面切换和点击事件] (http://blog.csdn.net/u012373815/article/details/47709213)

效果图



案例源代码下载

Fragment+Viewpager实现app主界面.zip

案例结构



Fragment1.java Fragment2.java Fragment3.java

tab1.xml tab2.xml tab3.xml bottom.xml 的代码和这篇博客一样参照

android Fragment实现APP主界面Tab页面切换和点击事件

这里我就主要写一下 (为了兼容性请都引用android.support.v4.app)

MainActivity.java

import java.util.ArrayList;
import java.util.List;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;

public class MainActivity extends FragmentActivity  implements OnClickListener {
private ViewPager viewpager;
private TextView t1, t2, t3;
private FragmentPagerAdapter fAdapter;
private List<Fragment> mFragments;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initEvent();
setSelect(0);
}

/*
* 初始化点击
*/
private void initEvent() {
// TODO Auto-generated method stub
t1.setOnClickListener(this);
t2.setOnClickListener(this);
t3.setOnClickListener(this);
}

// 初始化
private void initView() {
viewpager = (ViewPager) findViewById(R.id.viewpager);

t1 = (TextView) findViewById(R.id.text1);
t2 = (TextView) findViewById(R.id.text2);
t3 = (TextView) findViewById(R.id.text3);

mFragments=new ArrayList<Fragment>();
Fragment tab1=new Fragment1();
Fragment tab2=new Fragment2();
Fragment tab3=new Fragment3();
mFragments.add(tab1);
mFragments.add(tab2);
mFragments.add(tab3);

//适配器
fAdapter =new FragmentPagerAdapter(getSupportFragmentManager()) {

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

@Override
public Fragment getItem(int arg0) {
//根据位置返回Fragment
return mFragments.get(arg0);
}
};
//添加内容到viewpager
viewpager.setAdapter(fAdapter);
//建立滑动监听
viewpager.setOnPageChangeListener(new OnPageChangeListener() {

@Override
public void onPageSelected(int arg0) {
// TODO Auto-generated method stub
int currentItem=viewpager.getCurrentItem();
setTab(currentItem);

}

@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

}
});

}

/**
* 将tab 的text 初始化
*/
public void reset() {
t1.setText("标题1");
t2.setText("标题2");
t3.setText("标题3");
}

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
reset();
switch (v.getId()) {
case R.id.text1:
setSelect(0);
break;
case R.id.text2:
setSelect(1);
break;
case R.id.text3:
setSelect(2);
break;
default:
break;
}
}
private void setSelect(int i) {
setTab(i);
//设置那个fragment 显示
viewpager.setCurrentItem(i);
}
//重用的代码抽出为方法   alt+shift+m  抽出代码的快捷键
private void setTab(int i) {
reset();
switch (i) {
case 0:
t1.setText("选中");
break;
case 1:
t2.setText("选中");
break;
case 2:
t3.setText("选中");
break;
}
}
}


activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#EEEEEE"
android:orientation="vertical" >
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1"
></android.support.v4.view.ViewPager>
<include layout="@layout/bottom" />
</LinearLayout>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息