viewpager+FragmentAdapter实现App主界面Tab

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>
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值