亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

Android中實現可滑動的Tab的3種方式

2020-04-11 11:55:25
字體:
來源:轉載
供稿:網友

1. 第一種,使用 TabHost + ViewPager 實現
該方法會有一個Bug,當設置tabHost.setCurrentTab()為0時,ViewPager不顯示(準確的說是加載),只有點擊其他任意一個tab后才會加載。

有解的同學吼一聲~~~~~~~

Activity:

復制代碼 代碼如下:

package com.swordy.demo.android.fragment;

import java.util.Random;

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.FragmentStatePagerAdapter;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.TabHost;
import android.widget.TabHost.OnTabChangeListener;
import android.widget.TabWidget;
import android.widget.TextView;

import com.swordy.demo.android.R;
import com.swordy.library.android.util.ELog;

/**
 * 1. 使用TabHost和ViewPager組合實現一個可以滑動的tab
 * 2. bug:如果當前頁為0,則ViewPager第一次不加載。
 *
 * @author swordy
 * @email mryangjian@live.com
 * @since Jan 20, 2014
 * @version 1.0
 */
public class SlideTabs1 extends FragmentActivity
{
    private static final String TAG = "AndroidDemos.SlideTabs1";

    private TabHost mTabHost;

    private ViewPager mViewPager;

    private PagerAdapter mPagerAdapter;

    private String[] addresses = { "first", "second", "third" };

    @Override
    protected void onCreate(Bundle arg0)
    {
        super.onCreate(arg0);
        setContentView(R.layout.fragment_slidetabs1);

        mViewPager = (ViewPager) findViewById(R.id.viewPager1);
        mPagerAdapter = new MyPagerAdapter(getSupportFragmentManager());
        mViewPager.setAdapter(mPagerAdapter);

        mTabHost = (TabHost) findViewById(android.R.id.tabhost);
        mTabHost.setup();
        mTabHost.addTab(mTabHost.newTabSpec("one").setIndicator("one-1")
                .setContent(R.id.viewPager1));
        mTabHost.addTab(mTabHost.newTabSpec("two").setIndicator("two-2")
                .setContent(R.id.viewPager1));
        mTabHost.addTab(mTabHost.newTabSpec("three").setIndicator("three-3")
                .setContent(R.id.viewPager1));

        TabWidget tabWidget = mTabHost.getTabWidget();
        int count = tabWidget.getChildCount();
        for (int i = 0; i != count; i++)
        {
            final int index = i;
            tabWidget.getChildAt(i).setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v)
                {
                    mTabHost.setCurrentTab(index);
                    mViewPager.setCurrentItem(index);
                }
            });
        }
        mTabHost.setOnTabChangedListener(new OnTabChangeListener() {

            @Override
            public void onTabChanged(String tabId)
            {
                ELog.i(TAG, "@--> onTabChanged by tabId: " + tabId);
            }
        });

        mViewPager.setOnPageChangeListener(new OnPageChangeListener() {

            @Override
            public void onPageSelected(int arg0)
            {
                ELog.i(TAG, "@--> onPageSelected: " + arg0);
                mTabHost.setCurrentTab(arg0);
            }

            @Override
            public void onPageScrolled(int arg0, float arg1, int arg2)
            {

            }

            @Override
            public void onPageScrollStateChanged(int arg0)
            {

            }
        });
    }

    private class MyPagerAdapter extends FragmentStatePagerAdapter
    {

        public MyPagerAdapter(FragmentManager fm)
        {
            super(fm);
        }

        @Override
        public Fragment getItem(int position)
        {
            ELog.i(TAG, "@--> getItem by position" + position);
            ELog.i(TAG, "@--> getItem by position" + position);
            return MyFragment.create(addresses[position]);
        }

        @Override
        public int getCount()
        {
            return addresses.length;
        }

    }

    public static class MyFragment extends Fragment
    {
        public static MyFragment create(String address)
        {
            ELog.i(TAG, "@--> MyFragment.create()");
            MyFragment f = new MyFragment();
            Bundle b = new Bundle();
            b.putString("address", address);
            f.setArguments(b);
            return f;
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState)
        {
            Random r = new Random(System.currentTimeMillis());

            Bundle b = getArguments();

            View v = inflater.inflate(R.layout.fragment_viewpager1_layout1, null);
            v.setBackgroundColor(r.nextInt() >> 8 | 0xFF << 24);

            TextView txvAddress = (TextView) v.findViewById(R.id.textView1);
            txvAddress.setTextColor(r.nextInt() >> 8 | 0xFF << 24);
            txvAddress.setBackgroundColor(r.nextInt() >> 8 | 0xFF << 24);

            txvAddress.setText(b.getString("address", ""));
            return v;
        }

    }
}

布局:

復制代碼 代碼如下:

<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/tabhost"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >

        <TabWidget
            android:id="@android:id/tabs"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="right|center_vertical" />

        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="match_parent"
            android:layout_height="match_parent" >

            <android.support.v4.view.ViewPager
                android:id="@+id/viewPager1"
                android:layout_width="match_parent"
                android:layout_height="match_parent" />
        </FrameLayout>
    </LinearLayout>

</TabHost>

2. 第二種,使用官方提供的方法 ActionBar + ViewPager 實現

該方法有兩個缺陷,或者說不是缺陷,只是我沒有找到解決的辦法。

第一,tab點上不是很靈敏,可能就是這么設定的,為了防止頻繁加載吧,但是體驗稍稍不爽;

第二,ActionBar在最頂部,如果我的布局是:頂部一個帶返回按鈕的標題欄,中間是tab,底部是tabcontent,怎么搞?

Activity:

復制代碼 代碼如下:

package com.swordy.demo.android.fragment;

import java.util.Random;

import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.ActionBar.TabListener;
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.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import com.swordy.demo.android.R;

/**
 * 1. 使用ActionBar和ViewPager實現可以滑動的Tab
 *
 * @author swordy
 * @email mryangjian@live.com
 * @since Jan 20, 2014
 * @version 1.0
 */
public class SlideTabs2 extends FragmentActivity
{
    private static final String TAG = "AndroidDemos.SlideTabs2";

    private ViewPager mViewPager;

    private ActionBar mActionBar;

    private MyPagerAdapter mPagerAdapter;

    private String[] addresses = { "first", "second", "third" };

    private Tab[] mTabs = new Tab[addresses.length];

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fragment_viewpager1);
        mViewPager = (ViewPager) findViewById(R.id.viewPager1);
        mPagerAdapter = new MyPagerAdapter(getSupportFragmentManager());
        mViewPager.setAdapter(mPagerAdapter);
        mViewPager.setOnPageChangeListener(mPageChangeListener);

        mActionBar = getActionBar();
        mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
        mActionBar.setDisplayShowTitleEnabled(false);
        mActionBar.setDisplayShowHomeEnabled(false);

        for (int i = 0; i != addresses.length; i++)
        {
            mTabs[i] = mActionBar.newTab().setText(addresses[i]).setTabListener(mTabListener);
            mActionBar.addTab(mTabs[i]);
        }

    }

    private OnPageChangeListener mPageChangeListener = new OnPageChangeListener() {

        @Override
        public void onPageSelected(int arg0)
        {
            mActionBar.setSelectedNavigationItem(arg0);
        }

        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2)
        {

        }

        @Override
        public void onPageScrollStateChanged(int arg0)
        {

        }
    };

    private TabListener mTabListener = new TabListener() {

        @Override
        public void onTabSelected(Tab tab, android.app.FragmentTransaction ft)
        {
            if (tab == mTabs[0])
            {
                mViewPager.setCurrentItem(0);
            } else if (tab == mTabs[1])
            {
                mViewPager.setCurrentItem(1);
            } else if (tab == mTabs[2])
            {
                mViewPager.setCurrentItem(2);
            }

        }

        @Override
        public void onTabUnselected(Tab tab, android.app.FragmentTransaction ft)
        {
            // TODO Auto-generated method stub

        }

        @Override
        public void onTabReselected(Tab tab, android.app.FragmentTransaction ft)
        {
            // TODO Auto-generated method stub

        }
    };

    public class MyPagerAdapter extends FragmentPagerAdapter
    {

        public MyPagerAdapter(FragmentManager fm)
        {
            super(fm);
        }

        @Override
        public Fragment getItem(int position)
        {
            return MyFragment.create(addresses[position]);
        }

        @Override
        public int getCount()
        {
            return addresses.length;
        }
    }

    public static class MyFragment extends Fragment
    {
        public static MyFragment create(String address)
        {
            MyFragment f = new MyFragment();
            Bundle b = new Bundle();
            b.putString("address", address);
            f.setArguments(b);
            return f;
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState)
        {
            Random r = new Random(System.currentTimeMillis());

            Bundle b = getArguments();

            View v = inflater.inflate(R.layout.fragment_viewpager1_layout1, null);
            v.setBackgroundColor(r.nextInt() >> 8 | 0xFF << 24);

            TextView txvAddress = (TextView) v.findViewById(R.id.textView1);
            txvAddress.setTextColor(r.nextInt() >> 8 | 0xFF << 24);
            txvAddress.setBackgroundColor(r.nextInt() >> 8 | 0xFF << 24);

            txvAddress.setText(b.getString("address", ""));
            return v;
        }

    }
}


布局:
復制代碼 代碼如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <android.support.v4.view.ViewPager
        android:id="@+id/viewPager1"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>


3. 【推薦】第三種,使用 TabWidget + ViewPager 實現
該方法不錯,推薦使用。

Activity:

復制代碼 代碼如下:

package com.swordy.demo.android.fragment;

import java.util.Random;

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.FragmentStatePagerAdapter;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TabWidget;
import android.widget.TextView;

import com.swordy.demo.android.R;

/**
 * 1. 使用TabWidget和ViewPager實現可滑動的Tab
 *
 * @author swordy
 * @email mryangjian@live.com
 * @since Jan 20, 2014
 * @version 1.0
 */
public class SlideTabs3 extends FragmentActivity
{
    private static final String TAG = "AndroidDemos.SlideTabs3";

    private ViewPager mViewPager;

    private PagerAdapter mPagerAdapter;

    private TabWidget mTabWidget;

    private String[] addresses = { "first", "second", "third" };

    private Button[] mBtnTabs = new Button[addresses.length];

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fragment_slidetabs3);

        mTabWidget = (TabWidget) findViewById(R.id.tabWidget1);
        mTabWidget.setStripEnabled(false);
        mBtnTabs[0] = new Button(this);
        mBtnTabs[0].setFocusable(true);
        mBtnTabs[0].setText(addresses[0]);
        mBtnTabs[0].setTextColor(getResources().getColorStateList(R.color.button_bg_color_selector));
        mTabWidget.addView(mBtnTabs[0]);
        /*
         * Listener必須在mTabWidget.addView()之后再加入,用于覆蓋默認的Listener,
         * mTabWidget.addView()中默認的Listener沒有NullPointer檢測。
         */
        mBtnTabs[0].setOnClickListener(mTabClickListener);

        mBtnTabs[1] = new Button(this);
        mBtnTabs[1].setFocusable(true);
        mBtnTabs[1].setText(addresses[1]);
        mBtnTabs[1].setTextColor(getResources().getColorStateList(R.color.button_bg_color_selector));
        mTabWidget.addView(mBtnTabs[1]);
        mBtnTabs[1].setOnClickListener(mTabClickListener);

        mBtnTabs[2] = new Button(this);
        mBtnTabs[2].setFocusable(true);
        mBtnTabs[2].setText(addresses[2]);
        mBtnTabs[2].setTextColor(getResources().getColorStateList(R.color.button_bg_color_selector));
        mTabWidget.addView(mBtnTabs[2]);
        mBtnTabs[2].setOnClickListener(mTabClickListener);

        mViewPager = (ViewPager) findViewById(R.id.viewPager1);
        mPagerAdapter = new MyPagerAdapter(getSupportFragmentManager());
        mViewPager.setAdapter(mPagerAdapter);
        mViewPager.setOnPageChangeListener(mPageChangeListener);

        mTabWidget.setCurrentTab(0);
    }

    private OnClickListener mTabClickListener = new OnClickListener() {

        @Override
        public void onClick(View v)
        {
            if (v == mBtnTabs[0])
            {
                mViewPager.setCurrentItem(0);
            } else if (v == mBtnTabs[1])
            {
                mViewPager.setCurrentItem(1);

            } else if (v == mBtnTabs[2])
            {
                mViewPager.setCurrentItem(2);

            }
        }
    };

    private OnPageChangeListener mPageChangeListener = new OnPageChangeListener() {

        @Override
        public void onPageSelected(int arg0)
        {
            mTabWidget.setCurrentTab(arg0);
        }

        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2)
        {

        }

        @Override
        public void onPageScrollStateChanged(int arg0)
        {

        }
    };

    private class MyPagerAdapter extends FragmentStatePagerAdapter
    {

        public MyPagerAdapter(FragmentManager fm)
        {
            super(fm);
        }

        @Override
        public Fragment getItem(int position)
        {
            return MyFragment.create(addresses[position]);
        }

        @Override
        public int getCount()
        {
            return addresses.length;
        }

    }

    public static class MyFragment extends Fragment
    {
        public static MyFragment create(String address)
        {
            MyFragment f = new MyFragment();
            Bundle b = new Bundle();
            b.putString("address", address);
            f.setArguments(b);
            return f;
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState)
        {
            Random r = new Random(System.currentTimeMillis());

            Bundle b = getArguments();

            View v = inflater.inflate(R.layout.fragment_viewpager1_layout1, null);
            v.setBackgroundColor(r.nextInt() >> 8 | 0xFF << 24);

            TextView txvAddress = (TextView) v.findViewById(R.id.textView1);
            txvAddress.setTextColor(r.nextInt() >> 8 | 0xFF << 24);
            txvAddress.setBackgroundColor(r.nextInt() >> 8 | 0xFF << 24);

            txvAddress.setText(b.getString("address", ""));
            return v;
        }

    }
}

布局:

復制代碼 代碼如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TabWidget
        android:id="@+id/tabWidget1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="right|center_vertical" />

    <android.support.v4.view.ViewPager
        android:id="@+id/viewPager1"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
热久久视久久精品18亚洲精品| 一区二区三区无码高清视频| 中文字幕少妇一区二区三区| 三级精品视频久久久久| 日韩av中文字幕在线免费观看| 日韩高清人体午夜| 91精品久久久久久久久久久久久久| 91麻豆桃色免费看| 欧美日韩999| 欧美日本精品在线| 欧美性猛交xxxx免费看漫画| 国产成人极品视频| 亚洲小视频在线观看| 亚洲日韩欧美视频一区| 伊人成人开心激情综合网| 亚洲专区国产精品| 清纯唯美日韩制服另类| 日韩欧美在线看| 国产一区二区三区视频在线观看| 国产精品福利网站| 国产69久久精品成人| 中文字幕自拍vr一区二区三区| 成人网在线免费看| 亚洲精品久久久久中文字幕二区| 欧美日韩精品中文字幕| 亚洲精品国产成人| 国产日产欧美精品| 日韩大陆毛片av| 黑人巨大精品欧美一区二区免费| 91久久综合亚洲鲁鲁五月天| 亚洲国产精品99久久| 欧美不卡视频一区发布| 国产亚洲欧美日韩精品| 欧美孕妇性xx| 亚洲性生活视频在线观看| 日韩精品在线观看一区二区| 国产91精品久久久| 欧美成人黑人xx视频免费观看| 日日狠狠久久偷偷四色综合免费| 亚洲欧洲在线免费| 国产精品91在线| 亚洲人成网站在线播| 久久久在线免费观看| 国产美女精彩久久| 日本中文字幕成人| 亚洲欧美国产视频| 国内偷自视频区视频综合| 亚洲国产精品人人爽夜夜爽| 欧美日韩国产精品一区二区不卡中文| 中文欧美在线视频| 日韩二区三区在线| 成人性教育视频在线观看| 九九精品视频在线观看| 国产精品18久久久久久首页狼| 国产精品免费视频久久久| 欧美激情一区二区三区在线视频观看| 亚洲一区二区福利| xxx欧美精品| 国产精品久久久久久久久男| 国产午夜精品一区理论片飘花| 欧美日韩国产黄| 国产免费久久av| 亚洲最大福利网站| 欧美性猛xxx| 77777少妇光屁股久久一区| 久久夜色精品亚洲噜噜国产mv| 日韩精品在线免费| 91九色蝌蚪国产| 国产精品美女主播在线观看纯欲| 中文字幕一区二区三区电影| 97精品免费视频| 国产精品1区2区在线观看| 色诱女教师一区二区三区| 国产91在线视频| 国产精品十八以下禁看| 九九九久久国产免费| 久久精品亚洲精品| 一区二区三区在线播放欧美| 日韩中文视频免费在线观看| 精品国产一区二区三区久久久狼| 日韩电影中文字幕在线观看| 国产精品福利在线观看网址| 国产成人激情小视频| 久久久人成影片一区二区三区观看| 欧美乱大交做爰xxxⅹ性3| 中文字幕日韩精品有码视频| 欧美激情欧美激情在线五月| 中文字幕亚洲第一| 亚洲激情在线观看视频免费| 欧美日韩视频免费播放| 热久久美女精品天天吊色| 欧美精品成人91久久久久久久| 伊人伊成久久人综合网站| 欧美寡妇偷汉性猛交| 欧美成人午夜激情视频| 亚洲自拍偷拍福利| 国产精品电影网| 国产一区二区三区网站| 亚洲的天堂在线中文字幕| 日韩欧美亚洲一二三区| 亚洲欧美国产精品| 日韩视频在线观看免费| 欧美在线免费看| 久热精品在线视频| 欧美在线免费观看| 日韩国产欧美精品一区二区三区| 在线观看欧美www| 在线电影欧美日韩一区二区私密| 中文字幕久久精品| 97精品在线观看| 97精品国产97久久久久久| 国产一区二区三区在线观看视频| 亚洲第一区第一页| 日韩国产高清污视频在线观看| 日韩精品视频中文在线观看| 欧美一区二区三区图| 亚洲精品视频播放| 欧美有码在线观看| 国产成人综合av| 亚洲美女喷白浆| 91久久久久久久| 欧美色视频日本高清在线观看| 欧美专区中文字幕| 中文字幕在线看视频国产欧美在线看完整| 国产精品成人久久久久| 亚洲国产精品成人va在线观看| 一区二区三区www| 欧美日韩亚洲国产一区| 国产成人精品av在线| 日韩欧美亚洲范冰冰与中字| 黄色一区二区在线观看| 日韩精品久久久久久久玫瑰园| 91在线视频精品| 最新日韩中文字幕| 国产综合福利在线| 国产精品视频一区二区高潮| 国产成人综合一区二区三区| 国产xxx69麻豆国语对白| 精品日本美女福利在线观看| 精品国产乱码久久久久久婷婷| 欧美性xxxx| 国产精品视频网站| 色无极亚洲影院| 97精品伊人久久久大香线蕉| 欧美激情伊人电影| 91精品国产高清久久久久久久久| 国产v综合ⅴ日韩v欧美大片| 日韩在线视频二区| 成人免费看吃奶视频网站| 久久在线观看视频| 亚洲专区中文字幕| 91沈先生作品| 性亚洲最疯狂xxxx高清| 日韩免费视频在线观看| 亚洲一区二区三区四区视频| 亚洲男人天堂古典| 精品国产一区二区三区久久久| 国产精品电影网站| 国产精品ⅴa在线观看h| 日韩欧美精品在线观看| 亚洲男人的天堂在线| 国产精品久久久999| 91tv亚洲精品香蕉国产一区7ujn| 欧美日韩另类字幕中文|