ViewPager和TabHost結合學習心得

   剛開始做項目,有一個頁面上面是三個標籤, 下面三個頁面可以左右滑動,剛開始挺抓狂的,怎麼讓它們標籤與頁面關聯起來呢?我想到了TabHost和ViewPager結合,使用TabHost切換Activity,使用ViewPager切換界面,廢話少說,直接看代碼吧。

   先看看佈局文件:

<?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" >


   <RelativeLayout

       android:id="@+id/relativeLayout1"

       android:layout_width="match_parent"

       android:layout_height="40dp"

       android:layout_alignParentLeft="true"

       android:layout_alignParentTop="true"

       android:background="@color/GoldEnrod" >


       <EditText

           android:id="@+id/editText1"

           android:layout_width="match_parent"

           android:layout_height="wrap_content"

           android:layout_centerHorizontal="true"

           android:layout_centerVertical="true"

           android:layout_marginLeft="22dp"

           android:background="@drawable/albums_icon_bg"

           android:ems="10"

           android:hint="請輸入歌名:" >


           <requestFocus />

       </EditText>

   </RelativeLayout>


   <TabHost

       android:id="@android:id/tabhost"

       android:layout_width="match_parent"

       android:layout_height="match_parent"

       android:layout_alignParentLeft="true"

       android:layout_alignParentTop="true" >


       <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" >

           </TabWidget>


           <FrameLayout

               android:id="@android:id/tabcontent"

               android:layout_width="0dp"

               android:layout_height="0dp" >

           </FrameLayout>


           <android.support.v4.view.ViewPager

               android:id="@+id/pager_tab"

               android:layout_width="match_parent"

               android:layout_height="0dp"

               android:layout_weight="1" >

           </android.support.v4.view.ViewPager>

       </LinearLayout>

   </TabHost>

</LinearLayout>

項目中頁面文件:


import java.util.ArrayList;

import java.util.List;


import android.app.LocalActivityManager;

import android.app.TabActivity;

import android.content.Intent;

import android.os.Bundle;

import android.os.Parcelable;

import android.support.v4.view.PagerAdapter;

import android.support.v4.view.ViewPager;

import android.support.v4.view.ViewPager.OnPageChangeListener;

import android.util.Log;

import android.view.View;

import android.view.Window;

import android.widget.TabHost;

import android.widget.TabHost.OnTabChangeListener;

import android.widget.TextView;


import com.example.thjyyy.R;


public class Tab_changpin_Activity extends TabActivity

{

private ViewPager mViewPager;

private TabHost mTabHost;

// Tab頁面列表

private List<View> listViews;

// 當前頁卡編號

private int currIndex = 0;

// 頁卡內容

private LocalActivityManager manager = null;

// 動畫圖片偏移量

private int offset = 0;

// 動畫圖片寬度

private int bmpW;


@Override

protected void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

requestWindowFeature(Window.FEATURE_NO_TITLE);

setContentView(R.layout.activity_tab_changpin);


View layout = getLayoutInflater().inflate(

R.layout.activity_tab_changpin, null);

mTabHost = getTabHost();

mViewPager = (ViewPager) findViewById(R.id.pager_tab);


View view1 = getLayoutInflater().inflate(R.layout.tabmusic_item, null);

TextView tv_tabitem1 = (TextView) view1

.findViewById(R.id.tv_tabmusic_item);

tv_tabitem1.setText("單曲");

View view2 = getLayoutInflater().inflate(R.layout.tabmusic_item, null);

TextView tv_tabitem2 = (TextView) view2

.findViewById(R.id.tv_tabmusic_item);

tv_tabitem2.setText("歌手");

View view3 = getLayoutInflater().inflate(R.layout.tabmusic_item, null);

TextView tv_tabitem3 = (TextView) view3

.findViewById(R.id.tv_tabmusic_item);

tv_tabitem1.setText("專輯");

mTabHost.addTab(mTabHost.newTabSpec("tab1").setIndicator(view1)

.setContent(new Intent(this, SigleSongActivity.class)));

mTabHost.addTab(mTabHost.newTabSpec("tab2").setIndicator(view2)

.setContent(new Intent(this, TestActivity.class)));

mTabHost.addTab(mTabHost.newTabSpec("tab3").setIndicator(view3)

.setContent(new Intent(this,PersonListActivity.class)));

mTabHost.setCurrentTab(0);

manager = new LocalActivityManager(this, true);

manager.dispatchCreate(savedInstanceState);

//設置tab的點擊事件

mTabHost.setOnTabChangedListener(new OnTabChangeListener()

{

@Override

public void onTabChanged(String tabId)

{

if("tab1".equals(tabId))

{

mViewPager.setCurrentItem(0);

}

if("tab2".equals(tabId))

{

mViewPager.setCurrentItem(1);

}

if("tab3".equals(tabId))

{

mViewPager.setCurrentItem(2);

}

}

});


InitViewPager();

}


private void InitViewPager()

{

/**

* 初始化ViewPager

*/

listViews = new ArrayList<View>();

MyPagerAdapter mpAdapter = new MyPagerAdapter(listViews);

Intent intent = new Intent(this, SigleSongActivity.class);

listViews.add(getView("tab1", intent));

Intent intent2 = new Intent(this, TestActivity.class);

listViews.add(getView("tab2", intent2));

Intent intent3 = new Intent(this, PersonListActivity.class);

listViews.add(getView("tab3", intent3));

mViewPager.setAdapter(mpAdapter);

mViewPager.setCurrentItem(0);

mViewPager.setOnPageChangeListener(new MyOnPageChangeListener());


}


/**

* ViewPager適配器

*/

public class MyPagerAdapter extends PagerAdapter

{

public List<View> mListViews;


public MyPagerAdapter(List<View> mListViews)

{

this.mListViews = mListViews;

}


@Override

public void destroyItem(View arg0, int arg1, Object arg2)

{

((ViewPager) arg0).removeView(mListViews.get(arg1));

}


@Override

public void finishUpdate(View arg0)

{

}


@Override

public int getCount()

{

return mListViews.size();

}


@Override

public Object instantiateItem(View arg0, int arg1)

{

((ViewPager) arg0).addView(mListViews.get(arg1), 0);

return mListViews.get(arg1);

}


@Override

public boolean isViewFromObject(View arg0, Object arg1)

{

return arg0 == (arg1);

}

@Override                                                        

public void restoreState(Parcelable arg0, ClassLoader arg1) {    

}                                                                

@Override                                                        

public Parcelable saveState() {                                  

        return null;                                            

}                                                                

@Override                                                        

public void startUpdate(View arg0) {                            

}                                                                


}

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章