介绍

常见的应用框架
框架一:多个tab+Fragment,点击不同的tab加载不同的Fragment,不能滑动切换只能点击切换;
框架二:多个tab+ViewPager+FragmentPagerAdapter,点击不同的tab加载ViewPager对应的item,可以滑动切换,经过改进,可以实现"强制刷新"!
框架三:多个tab+ViewPager+FragmentPagerAdapter+SlidingMenu,左右滑菜单
其他:
上有标题栏,标题栏可以是在Fragment或ViewPager中的(如QQ,每个页面的标题栏都不一样)或者和tab同级(如微信,所有页面的标题栏都一样)。


框架一,MainActivity

public class MainActivity extends Activity implements OnClickListener {
    /**
     * 四个TextView控件
     */
    private TextView[] mTabTVs = new TextView[4];
    /**
     * 四个控件【未】按下时的图片id
     */
    private int[] mTabTVIdsNormal;
    /**
     * 四个控件按下时的图片id
     */
    private int[] mTabTVIdsPress;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        initViews();
        setTabSelection(mTabTVs[0]);
    }
    private void initViews() {
        mTabTVs[0] = (TextView) findViewById(R.id.tv_tab_bottom_weixin);
        mTabTVs[1] = (TextView) findViewById(R.id.tv_tab_bottom_friend);
        mTabTVs[2] = (TextView) findViewById(R.id.tv_tab_bottom_contact);
        mTabTVs[3] = (TextView) findViewById(R.id.tv_tab_bottom_setting);
        mTabTVIdsNormal = new int[] { R.drawable.tab_weixin_normal, R.drawable.tab_find_frd_normal, R.drawable.tab_address_normal,
                R.drawable.tab_settings_normal };
        mTabTVIdsPress = new int[] { R.drawable.tab_weixin_pressed, R.drawable.tab_find_frd_pressed, R.drawable.tab_address_pressed,
                R.drawable.tab_settings_pressed };
        //给四个控件设置一个Tag,当我们点击某个控件时可以根据这个Tag来识别此控件,当然我们也可以根据v.getid()来识别,但在这里setTag还有其他妙用
        for (int i = 0; i < mTabTVs.length; i++) {
            mTabTVs[i].setOnClickListener(this);
            mTabTVs[i].setTag(i);
        }
    }
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.tv_tab_bottom_weixin:
        case R.id.tv_tab_bottom_friend:
        case R.id.tv_tab_bottom_contact:
        case R.id.tv_tab_bottom_setting:
            setTabSelection(v);
            break;
        default:
            break;
        }
    }
    private void setTabSelection(View v) {
        //清除掉所有的选中状态
        for (int i = 0; i < mTabTVs.length; i++) {
            mTabTVs[i].setCompoundDrawablesWithIntrinsicBounds(null, getResources().getDrawable(mTabTVIdsNormal[i]), null, null);
            mTabTVs[i].setSelected(false);
        }
        // 改变控件的图片,这里的setSelected是为了演示通过selector来改变文字颜色
        int index = (Integer) v.getTag();
        ((TextView) v).setCompoundDrawablesWithIntrinsicBounds(null, getResources().getDrawable(mTabTVIdsPress[index]), null, null);
        v.setSelected(true);
        FragmentTransaction transaction = getFragmentManager().beginTransaction();
        switch (index) {
        case 0:
            transaction.replace(R.id.id_content, new MainTabFragment());//每次都必须通过new的方式创建Fragment,不然可能出问题
            break;
        case 1:
            transaction.replace(R.id.id_content, new MainTabFragment());
            break;
        case 2:
            transaction.replace(R.id.id_content, new MainTabFragment());
            break;
        case 3:
            transaction.replace(R.id.id_content, new MainTabFragment());
            break;
        }
        transaction.commit();
    }
}

框架一,布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="45dp"
        android:background="@drawable/title_bar"
        android:gravity="center"
        android:text="微信"
        android:textColor="#fff"
        android:textSize="20sp"
        android:textStyle="bold" />
    <FrameLayout
        android:id="@+id/id_content"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="2016" />
    <LinearLayout
        android:id="@+id/ly_main_tab_bottom"
        android:layout_width="fill_parent"
        android:layout_height="55dp"
        android:background="@drawable/bottom_bar" >
        <TextView
            android:id="@+id/tv_tab_bottom_weixin"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:drawableTop="@drawable/tab_weixin_normal"
            android:gravity="center"
            android:text="微信"
            android:textColor="@drawable/text_color_sel" />
        <TextView
            android:id="@+id/tv_tab_bottom_friend"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:drawableTop="@drawable/tab_find_frd_normal"
            android:gravity="center"
            android:text="朋友"
            android:textColor="@drawable/text_color_sel" />
        <TextView
            android:id="@+id/tv_tab_bottom_contact"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:drawableTop="@drawable/tab_address_normal"
            android:gravity="center"
            android:text="通讯录"
            android:textColor="@drawable/text_color_sel" />
        <TextView
            android:id="@+id/tv_tab_bottom_setting"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:drawableTop="@drawable/tab_settings_normal"
            android:gravity="center"
            android:text="设置"
            android:textColor="@drawable/text_color_sel" />
    </LinearLayout>
</LinearLayout>

框架一,fragment

public class MainTabFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.main_tab_01, container, false);
        TextView tv = (TextView) view.findViewById(R.id.tv);
        tv.setText(new SimpleDateFormat("yyyy-MM-dd\nHH:mm:ss").format(new Date()));
        return view;
    }
}

<?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:background="#fcfcfc"
    android:orientation="vertical" >
    <TextView
        android:id="@+id/tv"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="#88cc"
        android:gravity="center"
        android:text="第一个页面"
        android:textColor="#000"
        android:textSize="30sp" />
</LinearLayout>  

框架二,MainActivity

/**
 * 使用support.v4.app中的Fragment,继承自FragmentActivity
 * 没办法,使用FragmentPagerAdapter就不可以用app的Fragment,只能用v4的Fragment
 * 有个问题:viewpage响应的条目会因为自己的缓存机制导致不更新页面
 * @author 白乾涛
 */
public class MainActivity2 extends FragmentActivity implements OnClickListener {
    private ViewPager mViewPager;
    private FragmentPagerAdapter mPagerAdapter;
    private List<Fragment> mFragments = new ArrayList<Fragment>();
    /**
     * 四个TextView控件
     */
    private TextView[] mTabTVs = new TextView[4];
    /**
     * 四个控件【未】按下时的图片id
     */
    private int[] mTabTVIdsNormal;
    /**
     * 四个控件按下时的图片id
     */
    private int[] mTabTVIdsPress;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main2);
        initViews();
        initViewPage();
        setTabSelection(mTabTVs[0]);
    }
    private void initViews() {
        mTabTVs[0] = (TextView) findViewById(R.id.tv_tab_bottom_weixin);
        mTabTVs[1] = (TextView) findViewById(R.id.tv_tab_bottom_friend);
        mTabTVs[2] = (TextView) findViewById(R.id.tv_tab_bottom_contact);
        mTabTVs[3] = (TextView) findViewById(R.id.tv_tab_bottom_setting);
        mTabTVIdsNormal = new int[] { R.drawable.tab_weixin_normal, R.drawable.tab_find_frd_normal, R.drawable.tab_address_normal,
                R.drawable.tab_settings_normal };
        mTabTVIdsPress = new int[] { R.drawable.tab_weixin_pressed, R.drawable.tab_find_frd_pressed, R.drawable.tab_address_pressed,
                R.drawable.tab_settings_pressed };
        //给四个控件设置一个Tag,当我们点击某个控件时可以根据这个Tag来识别此控件,当然我们也可以根据v.getid()来识别,但在这里setTag还有其他妙用
        for (int i = 0; i < mTabTVs.length; i++) {
            mTabTVs[i].setOnClickListener(this);
            mTabTVs[i].setTag(i);
        }
    }
    private void initViewPage() {
        mFragments.add(new MainTabFragment2());
        mFragments.add(new MainTabFragment2());
        mFragments.add(new MainTabFragment2());
        mFragments.add(new MainTabFragment2());
        mPagerAdapter = new FragmentPagerAdapter(getSupportFragmentManager()) {
            @Override
            public int getCount() {
                return mFragments.size();
            }
            @Override
            public Fragment getItem(int arg0) {
                return mFragments.get(arg0);
            }
        };
        mViewPager = (ViewPager) findViewById(R.id.id_viewpager);
        mViewPager.setAdapter(mPagerAdapter);
        mViewPager.setOnPageChangeListener(new OnPageChangeListener() {
            @Override
            public void onPageSelected(int position) {
                setTabSelection(mTabTVs[position]);
            }
            @Override
            public void onPageScrollStateChanged(int arg0) {
            }
            @Override
            public void onPageScrolled(int arg0, float arg1, int arg2) {
            }
        });
    }
    @Override
    /**
     *当下面tab的状态改变时,更改ViewPager选中项
     */
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.tv_tab_bottom_weixin:
        case R.id.tv_tab_bottom_friend:
        case R.id.tv_tab_bottom_contact:
        case R.id.tv_tab_bottom_setting:
            setTabSelection(v);
            mViewPager.setCurrentItem((Integer) v.getTag());
            break;
        default:
            break;
        }
    }
    /**
     *当ViewPager选中项改变时,更改下面tab的状态
     */
    private void setTabSelection(View v) {
        //清除掉所有的选中状态
        for (int i = 0; i < mTabTVs.length; i++) {
            mTabTVs[i].setCompoundDrawablesWithIntrinsicBounds(null, getResources().getDrawable(mTabTVIdsNormal[i]), null, null);
            mTabTVs[i].setSelected(false);
        }
        // 改变控件的图片,这里的setSelected是为了演示通过selector来改变文字颜色
        int index = (Integer) v.getTag();
        ((TextView) v).setCompoundDrawablesWithIntrinsicBounds(null, getResources().getDrawable(mTabTVIdsPress[index]), null, null);
        v.setSelected(true);
    }
}

框架二,布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="45dp"
        android:background="@drawable/title_bar"
        android:gravity="center"
        android:text="微信"
        android:textColor="#fff"
        android:textSize="20sp"
        android:textStyle="bold" />
    <android.support.v4.view.ViewPager
        android:id="@+id/id_viewpager"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="2016" />
    <LinearLayout
        android:id="@+id/ly_main_tab_bottom"
        android:layout_width="fill_parent"
        android:layout_height="55dp"
        android:background="@drawable/bottom_bar" >
        <TextView
            android:id="@+id/tv_tab_bottom_weixin"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:drawableTop="@drawable/tab_weixin_normal"
            android:gravity="center"
            android:text="微信"
            android:textColor="@drawable/text_color_sel" />
        <TextView
            android:id="@+id/tv_tab_bottom_friend"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:drawableTop="@drawable/tab_find_frd_normal"
            android:gravity="center"
            android:text="朋友"
            android:textColor="@drawable/text_color_sel" />
        <TextView
            android:id="@+id/tv_tab_bottom_contact"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:drawableTop="@drawable/tab_address_normal"
            android:gravity="center"
            android:text="通讯录"
            android:textColor="@drawable/text_color_sel" />
        <TextView
            android:id="@+id/tv_tab_bottom_setting"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:drawableTop="@drawable/tab_settings_normal"
            android:gravity="center"
            android:text="设置"
            android:textColor="@drawable/text_color_sel" />
    </LinearLayout>
</LinearLayout>

框架二,fragment

/**
 * 使用support.v4.app中的Fragment
 * @author 白乾涛
 */
public class MainTabFragment2 extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.main_tab_01, container, false);
        TextView tv = (TextView) view.findViewById(R.id.tv);
        tv.setText(new SimpleDateFormat("yyyy-MM-dd\nHH:mm:ss").format(new Date()));
        return view;
    }
}

框架3,MainActivity

/**
 * 只能用v4的Fragment
 * @author 白乾涛
 */
public class MainActivity3 extends SlidingFragmentActivity implements OnClickListener {
    private ViewPager mViewPager;
    private FragmentPagerAdapter mPagerAdapter;
    private List<Fragment> mFragments = new ArrayList<Fragment>();
    private ImageView iv_menu_left;
    private ImageView iv_menu_right;
    /**
     * 四个TextView控件
     */
    private TextView[] mTabTVs = new TextView[4];
    /**
     * 四个控件【未】按下时的图片id
     */
    private int[] mTabTVIdsNormal;
    /**
     * 四个控件按下时的图片id
     */
    private int[] mTabTVIdsPress;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.main3);
        initViews();
        initMenu();
        initViewPage();
        setTabSelection(mTabTVs[0]);
    }
    private void initViews() {
        mTabTVs[0] = (TextView) findViewById(R.id.tv_tab_bottom_weixin);
        mTabTVs[1] = (TextView) findViewById(R.id.tv_tab_bottom_friend);
        mTabTVs[2] = (TextView) findViewById(R.id.tv_tab_bottom_contact);
        mTabTVs[3] = (TextView) findViewById(R.id.tv_tab_bottom_setting);
        mTabTVIdsNormal = new int[] { R.drawable.tab_weixin_normal, R.drawable.tab_find_frd_normal, R.drawable.tab_address_normal,
                R.drawable.tab_settings_normal };
        mTabTVIdsPress = new int[] { R.drawable.tab_weixin_pressed, R.drawable.tab_find_frd_pressed, R.drawable.tab_address_pressed,
                R.drawable.tab_settings_pressed };
        //给四个控件设置一个Tag,当我们点击某个控件时可以根据这个Tag来识别此控件,当然我们也可以根据v.getid()来识别,但在这里setTag还有其他妙用
        for (int i = 0; i < mTabTVs.length; i++) {
            mTabTVs[i].setOnClickListener(this);
            mTabTVs[i].setTag(i);
        }
        //点击弹出左右侧滑菜单
        iv_menu_left = (ImageView) findViewById(R.id.iv_menu_left);
        iv_menu_right = (ImageView) findViewById(R.id.iv_menu_right);
        iv_menu_left.setOnClickListener(this);
        iv_menu_right.setOnClickListener(this);
    }
    private void initMenu() {
        SlidingMenu menu = getSlidingMenu();
        //两侧通用设置
        menu.setMode(SlidingMenu.LEFT_RIGHT);
        menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN);
        menu.setShadowWidthRes(R.dimen.shadow_width);
        menu.setShadowDrawable(R.drawable.shadow);
        menu.setBehindOffsetRes(R.dimen.slidingmenu_offset);
        menu.setFadeDegree(0.35f);
        //左侧的菜单
        setBehindContentView(R.layout.menu_left);//左右侧不能使用同一个布局,并且replace掉的控件的ID不能相同!不知道为什么会有这种情况!
        Fragment leftMenuFragment = new MainTabFragment2("左侧的");
        getSupportFragmentManager().beginTransaction().replace(R.id.menu_left, leftMenuFragment).commit();
        //右侧菜单设置
        menu.setSecondaryShadowDrawable(R.drawable.shadow);//根据资源文件ID来设置右边(二级)滑动菜单的阴影效果
        menu.setSecondaryMenu(R.layout.menu_right);//设置右边侧滑菜单
        Fragment rightMenuFragment = new MainTabFragment2("右侧的");
        getSupportFragmentManager().beginTransaction().replace(R.id.menu_right, rightMenuFragment).commit();
    }
    private void initViewPage() {
        mFragments.add(new MainTabFragment2("第1个"));
        mFragments.add(new MainTabFragment2("第2个"));
        mFragments.add(new MainTabFragment2("第3个"));
        mFragments.add(new MainTabFragment2("第4个"));
        mPagerAdapter = new FragmentPagerAdapter(getSupportFragmentManager()) {
            @Override
            public int getCount() {
                return mFragments.size();
            }
            @Override
            public Fragment getItem(int arg0) {
                return mFragments.get(arg0);
            }
        };
        mViewPager = (ViewPager) findViewById(R.id.id_viewpager);
        mViewPager.setAdapter(mPagerAdapter);
        mViewPager.setOnPageChangeListener(new OnPageChangeListener() {
            @Override
            public void onPageSelected(int position) {
                setTabSelection(mTabTVs[position]);
            }
            @Override
            public void onPageScrollStateChanged(int arg0) {
            }
            @Override
            public void onPageScrolled(int arg0, float arg1, int arg2) {
            }
        });
    }
    @Override
    /**
     *当下面tab的状态改变时,更改ViewPager选中项
     */
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.tv_tab_bottom_weixin:
        case R.id.tv_tab_bottom_friend:
        case R.id.tv_tab_bottom_contact:
        case R.id.tv_tab_bottom_setting:
            setTabSelection(v);
            mViewPager.setCurrentItem((Integer) v.getTag());
            break;
        case R.id.iv_menu_left:
            getSlidingMenu().showMenu();
            break;
        case R.id.iv_menu_right:
            getSlidingMenu().showSecondaryMenu();
            break;
        default:
            break;
        }
    }
    /**
     *当ViewPager选中项改变时,更改下面tab的状态
     */
    private void setTabSelection(View v) {
        //清除掉所有的选中状态
        for (int i = 0; i < mTabTVs.length; i++) {
            mTabTVs[i].setCompoundDrawablesWithIntrinsicBounds(null, getResources().getDrawable(mTabTVIdsNormal[i]), null, null);
            mTabTVs[i].setSelected(false);
        }
        // 改变控件的图片,这里的setSelected是为了演示通过selector来改变文字颜色
        int index = (Integer) v.getTag();
        ((TextView) v).setCompoundDrawablesWithIntrinsicBounds(null, getResources().getDrawable(mTabTVIdsPress[index]), null, null);
        v.setSelected(true);
    }
}

框架3,布局

main3.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="45dp"
        android:background="@drawable/title_bar"
        android:orientation="horizontal" >
        <ImageView
            android:id="@+id/iv_menu_left"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:layout_marginLeft="3dp"
            android:src="@drawable/showleft_normal" />
        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:layout_weight="2016"
            android:gravity="center"
            android:text="微信"
            android:textColor="#fff"
            android:textSize="20sp"
            android:textStyle="bold" />
        <ImageView
            android:id="@+id/iv_menu_right"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:layout_marginRight="3dp"
            android:src="@drawable/showright_normal" />
    </LinearLayout>
    <android.support.v4.view.ViewPager
        android:id="@+id/id_viewpager"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />
    <LinearLayout
        android:id="@+id/ly_main_tab_bottom"
        android:layout_width="fill_parent"
        android:layout_height="55dp"
        android:background="@drawable/bottom_bar" >
        <TextView
            android:id="@+id/tv_tab_bottom_weixin"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:drawableTop="@drawable/tab_weixin_normal"
            android:gravity="center"
            android:text="微信"
            android:textColor="@drawable/text_color_sel" />
        <TextView
            android:id="@+id/tv_tab_bottom_friend"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:drawableTop="@drawable/tab_find_frd_normal"
            android:gravity="center"
            android:text="朋友"
            android:textColor="@drawable/text_color_sel" />
        <TextView
            android:id="@+id/tv_tab_bottom_contact"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:drawableTop="@drawable/tab_address_normal"
            android:gravity="center"
            android:text="通讯录"
            android:textColor="@drawable/text_color_sel" />
        <TextView
            android:id="@+id/tv_tab_bottom_setting"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:drawableTop="@drawable/tab_settings_normal"
            android:gravity="center"
            android:text="设置"
            android:textColor="@drawable/text_color_sel" />
    </LinearLayout>
</LinearLayout>
menu_left.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/menu_left"
    android:layout_width="match_parent"
    android:background="#ccf"
    android:layout_height="match_parent" />
menu_right.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/menu_right"
    android:layout_width="match_parent"
    android:background="#ccf"
    android:layout_height="match_parent" />

附件列表

应用框架 ViewPager Tab Fragment SlidingMenu的更多相关文章

  1. ViewPager+tab+Fragment的滑动

    package teamhgl.xinwensudu; import android.os.Bundle;import android.support.v4.app.Fragment;import a ...

  2. Android tab导航的几种方法:ActionBar tab +fragment,Viewpager+pagerTitleStrip,开源框架ViewPageIndicator 和 ViewPager

    action来实现tab标签 并跟fragment结合 因为要写新闻客户端这个tab导航是必须的 这里我写几个小练习,希望大家融会贯通. 1actionbar设置tab +fragment 布局是个l ...

  3. Android开发之ViewPager+ActionBar+Fragment实现响应式可滑动Tab

     今天我们要实现的这个效果呢,在Android的应用中十分地常见,我们可以看到下面两张图,无论是系统内置的联系人应用,还是AnyView的阅读器应用,我们总能找到这样的影子,当我们滑动屏幕时,Tab可 ...

  4. 低版本系统兼容的ActionBar(六)用Fragment+ViewPager+Tab实现快速导航

    Tab经常和Fragment结合使用,这一讲我们用3种方式来实现这种快捷导航. 0.重要的两个监听器 MyTabListener,这个我们之前已经接触过了 package com.kale.actio ...

  5. ViewPager之Fragment页面切换

    一.概述 ViewPager是android-support-v4中提供的类,它是一个容器类,常用于页面之间的切换. 继上篇文章<ViewPager之引导页>之后,本文主要介绍ViewPa ...

  6. ViewPager和Fragment的结合使用fragment里包含着listview的常见问题

    在我们开发的过程中可能会遇到类似需求,我们需要做一个左右滑动的tab导航,这个时候有些朋友可能会想到viewpager和fragment的结合来实现这个功能:当然实现的方法不单单着一种.我们这个随笔讨 ...

  7. 【 Android 】ViewPager + TabLayout + Fragment 数据初始化问题

    在 ViewPager 和 Fragment 配合使用的时候,ViewPager 会使用预加载机制,使得我们在没有切换到到对应页面时,就已经加载好了,这是个非常不好的用户体验. 所以本示例项目就诞生了 ...

  8. 使用ViewPager切换Fragment时,防止频繁调用OnCreatView

    使用ViewPager切换Fragment,我原先使用系统自带的适配器FragmentPagerAdapter. 切换fragment时,频繁调用oncreatview(). 查看FragmentPa ...

  9. viewpager和fragment预加载的解决

    在使用Viewpager和fragment处理中会出现预加载的问题,最近看别人的代码,终于找到了一个很好的处理方法 能有效的解决预加载的问题,在fragment都继承一个重写setUserVisibl ...

随机推荐

  1. 关于一个注册邮箱的demo

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...

  2. extjs中rowEditing动态编辑

    我们在使用Grid的rowEditing插件时希望能够根据自己的业务需求能够动态的实现那一列是用户可以编辑的,那一列用户不可编辑,下面给出一个方案能够实现rowEditing的动态编辑功能. 之前我通 ...

  3. linux 配置 sphinx 全文搜索引擎

    因为公司网站需要,最近在弄sphinx搜索引擎,也是遇到各种问题,最终终于解决了. 服务器系统:centos7 (64位) 详情看安装官网的安装教程进行 coreseek 3.2.14 这里只提一些注 ...

  4. js中定义变量加var与不加var的区别?

    var 不一定是用来定义局部变量的 jscript的全局变量和局部变量的分界是这样的:                  过程体(包括方法function,对象Object o ={})外的所有变量不 ...

  5. Smarty中{literal}的使用详解

     {literal} <script>function Login(){ document.LoginForm.submit();}</script>{/literal} == ...

  6. 关于System.out.println()与System.out.print("\n")的区别

    这是在写junit测试的时候发现的. import java.io.ByteArrayOutputStream; import java.io.PrintStream; public class Te ...

  7. Hybrid----优秀开源代码解读之JS与iOS Native Code互调的优雅实现方案-备

    本篇为大家介绍一个优秀的开源小项目:WebViewJavascriptBridge. 它优雅地实现了在使用UIWebView时JS与ios 的ObjC nativecode之间的互调,支持消息发送.接 ...

  8. 初谈使用Spring的感受

    我记得刚开始学Spring的时候,只是很自然的把它当做一个类似其他J2EE的框架来学习.那时候学Spring很大一部分是为了以后面试需要,因为毕竟搞Java的,你说不会Spring这都有点说不过去.当 ...

  9. express+jade+bootstrap+mongdb simple CRUD test

    1:当前环境 y@y:~$ node --version && express -V && mongo --version v0.12.2 MongoDB shell ...

  10. 【HDOJ】1438 钥匙计数之一

    状态压缩.分最后一个槽的值以及当前的配置方案是否可以进行DP. /* 1438 */ #include <cstdio> #include <cstring> #include ...