安卓编程 tab 空格的Fragment的问题,为什么我的tab在有滚动区的情况下、就无法点击了?

1200人阅读
Android d(40)
我们在开发过程中经常会用到多个Fragment之间进行切换,刚开始是有一些开发者可能会用到这种单例方法:
if (mFragment != null) {
ft.hide(mFragment);
这种方法避免了多次多fragment进行实例化,实例化一次多次使用的优化方法,但是用这个话,经过我们测试的工作者的暴力测试就会出现问题,比如:多个fragment乱串的问题,因为这个用做的话fragment的生命周期可能会乱掉,所以这样的写法并不是做好的我最近研究了下网上的一些大神发现有一个更好的实现,而且生命周期稳定,书写方便,下面就是说下这个adapter:
public class FragmentTabAdapter implements RadioGroup.OnCheckedChangeListener {
private List&Fragment& // 一个tab页面对应一个Fragment
private RadioG // 用于切换tab
private FragmentActivity fragmentA // Fragment所属的Activity
private int fragmentContentId; // Activity中所要被替换的区域的id
private int currentT // 当前Tab页面索引
private OnRgsExtraCheckedChangedListener onRgsExtraCheckedChangedL // 用于让调用者在切换tab时候增加新的功能
public FragmentTabAdapter(FragmentActivity fragmentActivity,
List&Fragment& fragments, int fragmentContentId, RadioGroup rgs) {
this.fragments =
this.rgs =
this.fragmentActivity = fragmentA
this.fragmentContentId = fragmentContentId;
// 默认显示第一页
FragmentTransaction ft = fragmentActivity.getSupportFragmentManager()
.beginTransaction();
ft.add(fragmentContentId, fragments.get(0));
ft.commit();
rgs.setOnCheckedChangeListener(this);
public void onCheckedChanged(RadioGroup radioGroup, int checkedId) {
for (int i = 0; i & rgs.getChildCount(); i++) {
if (rgs.getChildAt(i).getId() == checkedId) {
// 如果设置了切换tab额外功能功能接口
if (null != onRgsExtraCheckedChangedListener) {
onRgsExtraCheckedChangedListener.OnRgsExtraCheckedChanged(
radioGroup, checkedId, i);
Fragment fragment = fragments.get(i);
FragmentTransaction ft = obtainFragmentTransaction(i);
getCurrentFragment().onPause(); // 暂停当前tab
// getCurrentFragment().onStop(); // 暂停当前tab
if (fragment.isAdded()) {
// fragment.onStart(); // 启动目标tab的onStart()
fragment.onResume(); // 启动目标tab的onResume()
ft.add(fragmentContentId, fragment);
showTab(i); // 显示目标tab
ft.commit();
* @param idx
public void showTab(int idx) {
for (int i = 0; i & fragments.size(); i++) {
Fragment fragment = fragments.get(i);
FragmentTransaction ft = obtainFragmentTransaction(idx);
if (idx == i) {
ft.show(fragment);
ft.hide(fragment);
ft.commit();
currentTab = // 更新目标tab为当前tab
* 获取一个带动画的FragmentTransaction
* @param index
private FragmentTransaction obtainFragmentTransaction(int index) {
FragmentTransaction ft = fragmentActivity.getSupportFragmentManager()
.beginTransaction();
// 设置切换动画
// if (index & currentTab) {
// ft.setCustomAnimations(R.anim.slide_right_in,
// R.anim.slide_left_out);
// } else {
// ft.setCustomAnimations(R.anim.slide_left_in, R.anim.slide_right_out);
public int getCurrentTab() {
return currentT
public Fragment getCurrentFragment() {
return fragments.get(currentTab);
public OnRgsExtraCheckedChangedListener getOnRgsExtraCheckedChangedListener() {
return onRgsExtraCheckedChangedL
public void setOnRgsExtraCheckedChangedListener(
OnRgsExtraCheckedChangedListener onRgsExtraCheckedChangedListener) {
this.onRgsExtraCheckedChangedListener = onRgsExtraCheckedChangedL
* 切换tab额外功能功能接口
public static class OnRgsExtraCheckedChangedListener {
public void OnRgsExtraCheckedChanged(RadioGroup radioGroup,
int checkedId, int index) {
}这个适配器可以节省我们挺多代码的,我们在FragmentActivity中可以这样写:
首先新建一个集合用于存放fragment:
public List&Fragment& fragments = new ArrayList&Fragment&();
在这个里面的按钮都是用的RadioGroup和RadioButton:
虽然这里的RadioButton的ID没有用但是还是要写的,不然的话适配器分不清你到底点击了哪一个:
然后就是下面的这个:
TabOrderFragment,TabStatisticsFragment TabDishFragment TabMoreFragment这是四个fragment放到集合中
R.id.tab_content是你要替换的布局的IDmTabsRg是RadioGroup的对象;这样就可以了不用做其他什么操作了呢
&/pre&&pre&
fragments.add(new TabOrderFragment());
fragments.add(new TabStatisticsFragment());
fragments.add(new TabDishFragment());
fragments.add(new TabMoreFragment());
mTabAdapter = new FragmentTabAdapter(this, fragments, R.id.tab_content, mTabsRg);
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:37871次
排名:千里之外
原创:36篇
评论:10条
(1)(1)(1)(1)(2)(1)(6)(3)(2)(2)(4)(4)(4)(5)(6)以下内容为原创,转载请注明:
我前两天写过一篇博客《Android使用Fragment来实现TabHost的功能(解决切换Fragment状态不保存)以及各个Fragment之间的通信》(),实现了Tab切换时保留当前Fragment状态,并在切换前自动回调onPause()方法,在切换后自动调用onResume(),这样就做到了跟TahHost一样的功能。
今天来实现下ViewPager的功能,google提供了一个FragmentPagerAdapter这么一个适配器,蛋疼的是,碰到了跟上次类似的问题。比如ViewPager有5个page,刚打开的时候,会加载page1和page2,我们手动切换到page2的时候,会加载page3,切换到page3的时候,加载page4的同时会destory掉page1,所以,还是面临同样的问题,page的状态无法保存,于是,咱还是自己来实现下好了,自己动手,丰衣足食嘛!(同样&有朋友知道解决办法的话,希望联系我,赐教下哈)
先来看下整个demo的结构,跟上次实现TabHost的例子差不多:
TabAFm到TabEFm都是Fragment,并且每个Fragment对应一个布局文件。
TabAFm.java:
1 package com.wangjie.f
3 import android.app.A
4 import android.os.B
5 import android.support.v4.app.F
6 import android.view.LayoutI
7 import android.view.V
8 import android.view.ViewG
* Created with IntelliJ IDEA.
* Author: wangjie
email:tiantian.china.
* Date: 13-6-14
* Time: 下午2:39
16 public class TabAFm extends Fragment{
public void onAttach(Activity activity) {
super.onAttach(activity);
System.out.println("AAAAAAAAAA____onAttach");
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
System.out.println("AAAAAAAAAA____onCreate");
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
System.out.println("AAAAAAAAAA____onCreateView");
return inflater.inflate(R.layout.tab_a, container, false);
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
System.out.println("AAAAAAAAAA____onActivityCreated");
public void onStart() {
super.onStart();
System.out.println("AAAAAAAAAA____onStart");
public void onResume() {
super.onResume();
System.out.println("AAAAAAAAAA____onResume");
public void onPause() {
super.onPause();
System.out.println("AAAAAAAAAA____onPause");
public void onStop() {
super.onStop();
System.out.println("AAAAAAAAAA____onStop");
public void onDestroyView() {
super.onDestroyView();
System.out.println("AAAAAAAAAA____onDestroyView");
public void onDestroy() {
super.onDestroy();
System.out.println("AAAAAAAAAA____onDestroy");
public void onDetach() {
super.onDetach();
System.out.println("AAAAAAAAAA____onDetach");
如上述代码所示,TabAFm是一个Fragment,对应的布局文件是tab_a.xml,并实现了他的所有的生命周期回调函数并打印,便于调试
tab_a.xml布局中有个EditText
其他的Fragment大同小异,这里就不贴出代码了
现在来看MainActivity:
1 package com.wangjie.f
3 import android.os.B
4 import android.support.v4.app.F
5 import android.support.v4.app.FragmentA
6 import android.support.v4.view.ViewP
8 import java.util.ArrayL
9 import java.util.L
11 public class MainActivity extends FragmentActivity {
private ViewPager viewP
public List&Fragment& fragments = new ArrayList&Fragment&();
public String hello = "hello ";
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
fragments.add(new TabAFm());
fragments.add(new TabBFm());
fragments.add(new TabCFm());
fragments.add(new TabDFm());
fragments.add(new TabEFm());
viewPager = (ViewPager) findViewById(R.id.viewPager);
FragmentViewPagerAdapter adapter = new FragmentViewPagerAdapter(this.getSupportFragmentManager(), viewPager,fragments);
adapter.setOnExtraPageChangeListener(new FragmentViewPagerAdapter.OnExtraPageChangeListener(){
public void onExtraPageSelected(int i) {
System.out.println("Extra...i: " + i);
MainActivity上述代码所示
MainActivity是包含Fragment的Activity(也就是这里的5个Fragment)
他继承了FragmentActivity(因为我这里用的是android-support-v4.jar)
用一个List&Fragment&去维护5个Fragment,也就是5个page。
MainActivity的布局很简单,就一个ViewPager,main.xml如下:
1 &?xml version="1.0" encoding="utf-8"?&
2 &LinearLayout xmlns:android="/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
&android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="match_parent"
13 &/LinearLayout&
现在回到MainActivity中,下面这个FragmentViewPagerAdapter类是关键,是我自己编写的用于绑定和处理fragments和ViewPager之间的逻辑关系
FragmentViewPagerAdapter adapter = new FragmentViewPagerAdapter(this.getSupportFragmentManager(), viewPager,fragments);
现在看下FragmentViewPagerAdapter:
1 package com.wangjie.f
3 import android.support.v4.app.F
4 import android.support.v4.app.FragmentM
5 import android.support.v4.app.FragmentT
6 import android.support.v4.view.PagerA
7 import android.support.v4.view.ViewP
8 import android.view.V
9 import android.view.ViewG
11 import java.util.L
* 为ViewPager添加布局(Fragment),绑定和处理fragments和viewpager之间的逻辑关系
* Created with IntelliJ IDEA.
* Author: wangjie
email:tiantian.china.
* Date: 13-10-11
* Time: 下午3:03
21 public class FragmentViewPagerAdapter extends PagerAdapter implements ViewPager.OnPageChangeListener{
private List&Fragment& // 每个Fragment对应一个Page
private FragmentManager fragmentM
private ViewPager viewP // viewPager对象
private int currentPageIndex = 0; // 当前page索引(切换之前)
private OnExtraPageChangeListener onExtraPageChangeL // ViewPager切换页面时的额外功能添加接口
public FragmentViewPagerAdapter(FragmentManager fragmentManager, ViewPager viewPager , List&Fragment& fragments) {
this.fragments =
this.fragmentManager = fragmentM
this.viewPager = viewP
this.viewPager.setAdapter(this);
this.viewPager.setOnPageChangeListener(this);
public int getCount() {
return fragments.size();
public boolean isViewFromObject(View view, Object o) {
return view ==
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(fragments.get(position).getView()); // 移出viewpager两边之外的page布局
public Object instantiateItem(ViewGroup container, int position) {
Fragment fragment = fragments.get(position);
if(!fragment.isAdded()){ // 如果fragment还没有added
FragmentTransaction ft = fragmentManager.beginTransaction();
ft.add(fragment, fragment.getClass().getSimpleName());
ft.commit();
* 在用mit()方法提交FragmentTransaction对象后
* 会在进程的主线程中,用异步的方式来执行。
* 如果想要立即执行这个等待中的操作,就要调用这个方法(只能在主线程中调用)。
* 要注意的是,所有的回调和相关的行为都会在这个调用中被执行完成,因此要仔细确认这个方法的调用位置。
fragmentManager.executePendingTransactions();
if(fragment.getView().getParent() == null){
container.addView(fragment.getView()); // 为viewpager增加布局
return fragment.getView();
* 当前page索引(切换之前)
public int getCurrentPageIndex() {
return currentPageI
public OnExtraPageChangeListener getOnExtraPageChangeListener() {
return onExtraPageChangeL
* 设置页面切换额外功能监听器
* @param onExtraPageChangeListener
public void setOnExtraPageChangeListener(OnExtraPageChangeListener onExtraPageChangeListener) {
this.onExtraPageChangeListener = onExtraPageChangeL
public void onPageScrolled(int i, float v, int i2) {
if(null != onExtraPageChangeListener){ // 如果设置了额外功能接口
onExtraPageChangeListener.onExtraPageScrolled(i, v, i2);
public void onPageSelected(int i) {
fragments.get(currentPageIndex).onPause(); // 调用切换前Fargment的onPause()
fragments.get(currentPageIndex).onStop(); // 调用切换前Fargment的onStop()
if(fragments.get(i).isAdded()){
fragments.get(i).onStart(); // 调用切换后Fargment的onStart()
fragments.get(i).onResume(); // 调用切换后Fargment的onResume()
currentPageIndex =
if(null != onExtraPageChangeListener){ // 如果设置了额外功能接口
onExtraPageChangeListener.onExtraPageSelected(i);
public void onPageScrollStateChanged(int i) {
if(null != onExtraPageChangeListener){ // 如果设置了额外功能接口
onExtraPageChangeListener.onExtraPageScrollStateChanged(i);
* page切换额外功能接口
static class OnExtraPageChangeListener{
public void onExtraPageScrolled(int i, float v, int i2){}
public void onExtraPageSelected(int i){}
public void onExtraPageScrollStateChanged(int i){}
这里解决Fragment切换重新加载布局的办法,用的是把几个Fragment全部Add,然后根据要显示的哪个Fragment就把哪个Fragment的View给添加到&ViewGroup container&上去。
效果输出:
// 以下打开程序后,加载PageA和PageB
10-12 09:42:46.671: INFO/System.out(27248): AAAAAAAAAA____onAttach10-12 09:42:46.671: INFO/System.out(27248): AAAAAAAAAA____onCreate10-12 09:42:46.671: INFO/System.out(27248): AAAAAAAAAA____onCreateView10-12 09:42:46.761: INFO/System.out(27248): AAAAAAAAAA____onActivityCreated10-12 09:42:46.765: INFO/System.out(27248): AAAAAAAAAA____onStart10-12 09:42:46.765: INFO/System.out(27248): AAAAAAAAAA____onResume10-12 09:42:46.847: INFO/System.out(27248): BBBBBBBBBBB____onAttach10-12 09:42:46.847: INFO/System.out(27248): BBBBBBBBBBB____onCreate10-12 09:42:46.851: INFO/System.out(27248): BBBBBBBBBBB____onCreateView10-12 09:42:46.867: INFO/System.out(27248): BBBBBBBBBBB____onActivityCreated10-12 09:42:46.867: INFO/System.out(27248): BBBBBBBBBBB____onStart10-12 09:42:46.867: INFO/System.out(27248): BBBBBBBBBBB____onResume
// 以下切换到PageB
10-12 09:42:57.285: INFO/System.out(27248): AAAAAAAAAA____onPause    // 切换到PageB前会调用PageA的onPause()方法10-12 09:42:57.285: INFO/System.out(27248): BBBBBBBBBBB____onResume  // 切换到PageB后会调用PageB的onResume()方法10-12 09:42:57.285: INFO/System.out(27248): Extra...i: 1            // 切换页面时会调用切换额外功能接口(用户可以自己写需要的逻辑)10-12 09:42:57.582: INFO/System.out(27248): CCCCCCCCCC____onAttach    // 切换到PageB后会加载PageC10-12 09:42:57.586: INFO/System.out(27248): CCCCCCCCCC____onCreate10-12 09:42:57.586: INFO/System.out(27248): CCCCCCCCCC____onCreateView10-12 09:42:57.675: INFO/System.out(27248): CCCCCCCCCC____onActivityCreated10-12 09:42:57.675: INFO/System.out(27248): CCCCCCCCCC____onStart10-12 09:42:57.675: INFO/System.out(27248): CCCCCCCCCC____onResume
// 以下切换到PageC
10-12 09:43:18.261: INFO/System.out(27248): BBBBBBBBBBB____onPause&    // 切换到PageC前会调用PageB的onPause()方法10-12 09:43:18.261: INFO/System.out(27248): CCCCCCCCCC____onResume    // 切换到PageC后会调用PageC的onResume()方法10-12 09:43:18.261: INFO/System.out(27248): Extra...i: 2              // 切换页面时会调用切换额外功能接口(用户可以自己写需要的逻辑)10-12 09:43:18.726: INFO/System.out(27248): DDDDDDDDD____onAttach      // 切换到PageC后会加载PageD10-12 09:43:18.726: INFO/System.out(27248): DDDDDDDDD____onCreate10-12 09:43:18.726: INFO/System.out(27248): DDDDDDDDD____onCreateView10-12 09:43:18.738: INFO/System.out(27248): DDDDDDDDD____onActivityCreated10-12 09:43:18.738: INFO/System.out(27248): DDDDDDDDD____onStart10-12 09:43:18.742: INFO/System.out(27248): DDDDDDDDD____onResume
// 以下切换到PageB10-12 09:43:20.742: INFO/System.out(27248): CCCCCCCCCC____onPause      // 切换到PageB前会调用PageC的onPause()方法10-12 09:43:20.742: INFO/System.out(27248): BBBBBBBBBBB____onResume    //&切换到PageB后会调用PageB的onResume()方法10-12 09:43:20.746: INFO/System.out(27248): Extra...i: 1              // 切换页面时会调用切换额外功能接口(用户可以自己写需要的逻辑)
好了,到此为止,我们已经用Fragment实现了ViewPager的功能了,同样,下面来看下各个Fragment之间的通信
现在的情况是TabAFm中有个EditText,TabBFm中有个Button,MainActivity中有个变量&hello&
要做的是,切换到A,输入&I'm PageA&,切换到B,点击Button后,Toast显示&hello I'm PageA&
MainActivity中没什么好说的,就一个hello变量:
public String hello = "hello ";
TabBFm中:
1 @Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
System.out.println("BBBBBBBBBBB____onActivityCreated");
this.getView().findViewById(R.id.clickme).setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
// 获得绑定的FragmentActivity
MainActivity activity = ((MainActivity)getActivity());
// 获得TabAFm的控件
EditText editText = (EditText) activity.fragments.get(0).getView().findViewById(R.id.edit);
Toast.makeText(activity, activity.hello + editText.getText(), Toast.LENGTH_SHORT).show();
最终效果图:
demo下载:
阅读(...) 评论()Android Fragment使用问题集结 - David-Kuper的专栏 - CSDN博客
Android Fragment使用问题集结
Android Error
Android Coding
1、FragmentManager问题
问题描述:
使用FragmentManager管理Fragment的时候,如果调用FragmentTransaction的replace方法(实际上是先调用add()然后再调用remove()),那么Fragment就会被销毁然后重新创建。
这样导致几个问题:
1、Fragment重新实例化,里面的状态无法保存。
2、网络应用的情况下,Fragment重新实例化要重新请求数据,消耗多余流量。
3、重新实例化需要消耗时间,用户体验下降
解决方法:
使用hide()、show()方法进行fragment的显示与隐藏。这种方案需要消耗内存空间作为代价换取时间和体验。
关键代码片段
public void switchFragment(Fragment from, Fragment to) {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
if (!to.isAdded()) {
transaction.hide(from).add(R.id.fragment_container, to).commit();
transaction.hide(from).show(to).commit();
2、Fragment里面嵌套Fragment
问题描述:
很多手机应用都会有两层Fragment的嵌套,第一层是框架层的界面,一个Tab对应一个Fragment;第二层是某一个Tab下的Fragment里面又有多个Tab,每个Tab又对应一个Fragment,这个时候就要区分FragmentManager的获取方式了。如果使用不当,那么第二层下的Fragment就会出现数据错乱、不一致的问题。
getFragmentManager():该方法是获取管理第一层Tab的FragmentManager;是Activity界面下的Fragment管理。
getChildFragmentManager():该方法是获得Fragment下的第二层Tab的管理FragmentManager;是Fragment下的子Fragment管理。
解决方案:
Activity下的一级Tab,对应的使用getFragmentManager()来管理Fragment;
Fragment下的次级Tab,对应使用getChildFragmentManager()来管理子Fragment。
TabLayout+ViewPager+Fragment使用
自定义Tab:TabLayout与ViewPager关联的时候,默认会调用View中的PagerAdapter的getPageTitle()的方法来创建Tab,与ViewPager关联之后Tab是由框架创建,我们无法自定义创建。
在setUpWithViewPager()调用之后,获取TabLayout中的每一个Tab,调用Tab的setCustomeView()方法用我们自定义的View替换掉原来的View即可。
mViewPager.setAdapter(adapter);
mTabLayout.setupWithViewPager(mViewPager,false);
private void initTabView(String[] titles,KartinaFragmentPageAdapter adapter){
for(int i = 0; i & titles. i++){
TabLayout.Tab tab = mTabLayout.getTabAt(i);
if (tab != null)
tab.setCustomView(adapter.getTabView(i));
我的热门文章
即使是一小步也想与你分享关于Fragment嵌套Fragment并且使用tablayout的错误
今天碰到了这样一个问题,找了很多资料都没解决,记录一下,留给有缘人,希望你们不用花这么多时间
是这样的解决的:我尝试了在activity中使用tablayout+viewpager 并且使用FragmentStatePagerAdapter作为适配器,是没有问题的,但是嵌套Fragment就出现了问题,后来发现是上下文用错了,应该是嵌套的Fragment就不能使用全局的上下文,改成activity的上下文就可以了
同时注意嵌套Fragment拿到FragmentManager要用这个方法
getChildFragmentManager()
E/Runtime: FATAL EXCEPTION: main
Process: com.example.oschina, PID: 15882
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.oschina/com.example.oschina.ui.activity.YhdActivity}: android.view.InflateException: Binary XML file line #7: Error inflating class android.support.design.widget.TabLayout
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
at android.app.ActivityThread.access$800(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
Caused by: android.view.InflateException: Binary XML file line #7: Error inflating class android.support.design.widget.TabLayout
下面是Activity
package com.example.oschina.ui.
import android.os.B
import android.support.v4.app.FragmentM
import android.support.v7.app.AppCompatA
import com.example.oschina.R;
import com.example.oschina.ui.fragment.homefragment.MoveStirF
public class YhdActivity extends AppCompatActivity {
@Bind(R.id.stirfragment_tl)
TabLayout mStirfragmentTl;
@Bind(R.id.stirfragment_vp)
ViewPager mStirfragmentVp;
private List mShowItems = new ArrayList&&();*/
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_yhd);
/*ButterKnife.bind(this);*/
//通过Stringarray数组去获取字符串
String[] titles = Utils.getStringArray(R.array.tab_names);
mShowItems.add(new MoveStirFragmentInfo(titles[0], new NewStirFragment()));
mShowItems.add(new MoveStirFragmentInfo(titles[1], new HotStirFragment()));
mShowItems.add(new MoveStirFragmentInfo(titles[2], new MyStirFragment()));
MoveStirPagerAdapter adapter = new MoveStirPagerAdapter(getSupportFragmentManager(), mShowItems);
mStirfragmentVp.setAdapter(adapter);
mStirfragmentTl.setupWithViewPager(mStirfragmentVp);*/
FragmentManager supportFragmentManager = getSupportFragmentManager();
supportFragmentManager.beginTransaction().add(R.id.main_fragment,new MoveStirFragment()).commit();
下面是外层的Fragment
package com.example.oschina.ui.fragment.
import android.content.res.ColorStateL
import android.graphics.C
import android.os.B
import android.support.design.widget.TabL
import android.support.v4.app.F
import android.support.v4.view.ViewP
import android.view.LayoutI
import android.view.V
import android.view.ViewG
import com.example.oschina.OSChinaA
import com.example.oschina.R;
import com.example.oschina.adapter.MoveStirPagerA
import com.example.oschina.bean.MoveStirFragmentI
import com.example.oschina.ui.fragment.strifragment.HotStirF
import com.example.oschina.ui.fragment.strifragment.MyStirF
import com.example.oschina.ui.fragment.strifragment.NewStirF
import com.example.oschina.utils.U
import java.util.ArrayL
import java.util.L
* 动弹Fragment
* Created by Sang on .
public class MoveStirFragment extends Fragment {
private TabLayout mStirfragmentTl;
private ViewPager mStirfragmentVp;
private List mShowItems = new ArrayList&&();
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View successView = View.inflate(**OSChinaApplication.mContext**, R.layout.fragment_movestir, null);
mStirfragmentTl = (TabLayout) successView.findViewById(R.id.stirfragment_tl);
mStirfragmentVp = (ViewPager) successView.findViewById(R.id.stirfragment_vp);
initView();
return successV
private void initView() {
String[] titles = Utils.getStringArray(R.array.tab_names);
mShowItems.add(new MoveStirFragmentInfo(titles[0], new NewStirFragment()));
mShowItems.add(new MoveStirFragmentInfo(titles[1], new HotStirFragment()));
mShowItems.add(new MoveStirFragmentInfo(titles[2], new MyStirFragment()));
MoveStirPagerAdapter adapter = new MoveStirPagerAdapter(getChildFragmentManager(), mShowItems);
mStirfragmentVp.setAdapter(adapter);
mStirfragmentTl.setupWithViewPager(mStirfragmentVp);
mStirfragmentTl.setTabTextColors(ColorStateList.valueOf(Color.BLACK));
只要将上面加粗的全局上下文改成getContext()就好了}

我要回帖

更多关于 编程 tab 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信