這裏我們通過向RadioGroup中動態添加RadioButton給ViewPager添加tag,然後在確定ViewPager的頁數,再通過Fragment
填充ViewPager。
activity_main.xml文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<RadioGroup
android:id="@+id/radioGroup_tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
</RadioGroup>
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#0373b4" />
<android.support.v4.view.ViewPager
android:id="@+id/viewPager_main"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
選擇器selector:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/bg_tab" android:state_checked="true"/>
<item android:drawable="@android:color/white" android:state_checked="false"/>
</selector>
數組資源:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="arrTabTitles">
<item>書籤1</item>
<item>書籤2</item>
<item>書籤3</item>
<item>書籤4</item>
<item>書籤5</item>
<item>書籤6</item>
</string-array>
</resources>
MainActivity:繼承的是FragmentActivity
package com.steven.tab3.fragmentradiogroupviewpager;
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.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.Gravity;
import android.view.Menu;
import android.widget.LinearLayout.LayoutParams;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;
public class MainActivity extends FragmentActivity {
private ViewPager viewPager_main;
private RadioGroup radioGroup_tabs;
private RadioButton[] arrRadioButton;
private List<Fragment> totalList = new ArrayList<Fragment>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化選項卡
initTabs();
//初始化ViewPager
intiViewPager();
}
/**
* 初始化書籤選項卡
*/
private void initTabs() {
radioGroup_tabs = (RadioGroup) findViewById(R.id.radioGroup_tabs);
//獲取我們定義的數組資源
String[] arrTabTitles = getResources().getStringArray(
R.array.arrTabTitles);
//
arrRadioButton = new RadioButton[arrTabTitles.length];
//根據我們資源數組的長度動態創建RadioButton添加到RadioGroup中
for (int i = 0; i < arrTabTitles.length; i++) {
//動態創建RadioButton對象
RadioButton radioButton = new RadioButton(this);
//設置文本
radioButton.setText(arrTabTitles[i]);
//設置位置
radioButton.setGravity(Gravity.CENTER);
//設置背景
radioButton.setButtonDrawable(R.drawable.partition);
//通過選擇器給RadioButton設置背景,包括點擊時的背景和未被點擊時的背景
radioButton.setBackgroundResource(R.drawable.bg_radiobutton);
// 獲取屏幕寬度
int screenWidth = getResources().getDisplayMetrics().widthPixels;
//獲取每個tag的寬度
int eachWidth = screenWidth / arrTabTitles.length;
//設置每個條目的寬度和高度,寬度就是上面得到的平均值,高度是包裹內容
LayoutParams params = new LayoutParams(eachWidth,
LayoutParams.WRAP_CONTENT);
//給RadioButton設置寬度和高度,通過params設置
radioButton.setLayoutParams(params);
//把我們動態創建
radioGroup_tabs.addView(radioButton);
arrRadioButton[i] = radioButton;
}
//默認RadioButton數組的第0個位置爲選中
arrRadioButton[0].setChecked(true);
//設置RadioGroup的點擊事件
radioGroup_tabs
.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
//遍歷RadioGroup,如果RadioButton數組中的RadioButton的id和當前選中的id一樣,就設置ViewPager的位置爲
//該RadioButton所對應的ViewPager
for (int i = 0; i < radioGroup_tabs.getChildCount(); i++) {
if (arrRadioButton[i].getId() == checkedId) {
viewPager_main.setCurrentItem(i);
}
}
}
});
}
/**
* 初始化ViewPager
*/
private void intiViewPager() {
viewPager_main = (ViewPager) findViewById(R.id.viewPager_main);
// 初始化數據totalList,通過RadioGroup的子類長度明確ViewPager的頁數
for (int i = 0; i < radioGroup_tabs.getChildCount(); i++) {
//調用DummyFragment的getInstance方法,其返回值爲一個DummyFragment對象
DummyFragment fragment = DummyFragment.getInstance(i + 1);
//把我們實例化的Fragment放入lists集合中
totalList.add(fragment);
}
// 給ViewPager設置適配器
viewPager_main.setAdapter(new MyPagerAdapter(
getSupportFragmentManager(), totalList));
// 給ViewPager設置監聽事件
viewPager_main.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
//當頁面被選中時,設置RadioButton顯示下面的藍色橫線,就是我們selector選擇器中定義的
arrRadioButton[position].setChecked(true);
}
@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
}
});
}
/**
* 創建自定義適配器
*
* @author Administrator
*
*/
class MyPagerAdapter extends FragmentPagerAdapter {
private List<Fragment> list = null;
public MyPagerAdapter(FragmentManager fm, List<Fragment> list) {
super(fm);
this.list = list;
}
@Override
public Fragment getItem(int position) {
return list.get(position);
}
@Override
public int getCount() {
return list.size();
}
}
}
繼承自ListFragment的MyFragment:
package com.steven.tab3.fragmentradiogroupviewpager;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.os.Bundle;
import android.support.v4.app.ListFragment;
import android.widget.SimpleAdapter;
public class DummyFragment extends ListFragment {
private final static String KEY_NAME = "tabindex";
private int tabindex = 0;
private List<Map<String, Object>> totalList = new ArrayList<Map<String, Object>>();
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
// 數據初始化。一般來說數據都來自於網絡,需要異步訪問,json解析
loadNetworkData();
// 創建適配器
SimpleAdapter adapter = new SimpleAdapter(getActivity(), totalList,
R.layout.item_dummyframent, new String[] { "iconId", "title",
"summary" }, new int[] { R.id.imageView_item_icon,
R.id.textView_item_title, R.id.textView_item_summary });
// 設置適配器
setListAdapter(adapter);
}
/**
* 創建一個靜態方法讓MainActivity調用,感覺沒有必要
* 其實直接在MainActivity中new對象就可以了
* @param tabindex
* @return
*/
public static DummyFragment getInstance(int tabindex) {
DummyFragment fragment = new DummyFragment();
Bundle bundle = new Bundle();
bundle.putInt(KEY_NAME, tabindex);
fragment.setArguments(bundle);
return fragment;
}
/**
* 初始化totalList集合,就是我們把我們要加載的數據放入List集合中
*/
private void loadNetworkData() {
tabindex = getArguments().getInt(KEY_NAME);
for (int i = 0; i < 20; i++) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("iconId", R.drawable.ic_180);
map.put("title", "title_" + tabindex + "_" + i);
map.put("summary", "summay_" + tabindex + "_" + i);
totalList.add(map);
}
}
}
運行結果: