项目需要的框架是上面是可滑动隐藏的头布局,下面是滑动切换的viewpager
之前填充viewpager 用的adapter是
package com.example.panghaha12138.testapp;
import android.support.v4.view.PagerAdapter;
import android.view.View;
import android.view.ViewGroup;
import java.util.ArrayList;
public class MyPagerAdapter extends PagerAdapter {
private final ArrayList<View> views;
public MyPagerAdapter(ArrayList<View> views) {
this.views = views;
}
@Override
public int getCount() {
return views.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public void destroyItem(ViewGroup container, int position,
Object object) {
container.removeView(views.get(position));
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
container.addView(views.get(position));
return views.get(position);
}
}
不过这是我在自己demo 里写的 没有考虑到解耦的问题
因为是通过inflate 吹起来的view,操作代码都需要在一个fragment里写
view1 = View.inflate(getActivity(), R.layout.view3, null);
recyclerView1 = (RecyclerView) view1.findViewById(R.id.dongtailist);
swipeRefreshLayout1 = (SwipeRefreshLayout) view1.findViewById(R.id.refsh);
view2 = View.inflate(getActivity(), R.layout.view3, null);
recyclerView2 = (RecyclerView) view2.findViewById(R.id.dongtailist);
swipeRefreshLayout2 = (SwipeRefreshLayout) view2.findViewById(R.id.refsh);
这样不利于扩展和维护
所以采取用fragmentstatepageradapter
package com.example.panghaha12138.testapp;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import java.util.List;
/**
* ━━━━ Code is far away from ━━━━━━
* () ()
* ( ) ( )
* ( ) ( )
* ┏┛┻━━━┛┻┓
* ┃ ━ ┃
* ┃ ┳┛ ┗┳ ┃
* ┃ ┻ ┃
* ┗━┓ ┏━┛
* ┃ ┃
* ┃ ┗━━━┓
* ┃ ┣┓
* ┃ ┏┛
* ┗┓┓┏━┳┓┏┛
* ┃┫┫ ┃┫┫
* ┗┻┛ ┗┻┛
* ━━━━ bug with the more protecting ━━━
*
* @ClassName: Myadapter
* @Description:
* @Author: panghaha12138
* @Create On 2017/8/8 00:01
*/
public class Myadapter extends FragmentStatePagerAdapter {
public Myadapter(FragmentManager fm, List<Fragment> list) {
super(fm);
this.list = list;
}
public List<Fragment> list;
public Myadapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return list.get(position);
}
@Override
public int getCount() {
return list.size();
}
}
package com.example.panghaha12138.testapp;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.view.ViewGroup;
/**
* ━━━━ Code is far away from ━━━━━━
* () ()
* ( ) ( )
* ( ) ( )
* ┏┛┻━━━┛┻┓
* ┃ ━ ┃
* ┃ ┳┛ ┗┳ ┃
* ┃ ┻ ┃
* ┗━┓ ┏━┛
* ┃ ┃
* ┃ ┗━━━┓
* ┃ ┣┓
* ┃ ┏┛
* ┗┓┓┏━┳┓┏┛
* ┃┫┫ ┃┫┫
* ┗┻┛ ┗┻┛
* ━━━━ bug with the more protecting ━━━
*
* @ClassName: Test2Adapter
* @PackageName: com.example.panghaha12138.testapp
* @Create On 2017/8/3 00:48
* @Author: PangHaHa12138
* @CSDN: http://blog.csdn.net/panghaha12138
* @GitHub: https://github.com/PangHaHa12138
* @jianshu: http://www.jianshu.com/u/4e577623e3f8
* @Copyrights 2017/8/3 PangHaHa12138 All rights reserved.
*/
public class Test2Adapter extends FragmentPagerAdapter {
private FragmentManager manager;
public Test2Adapter(FragmentManager fm) {
super(fm);
this.manager = fm;
}
@Override
public Fragment getItem(int position) {
Fragment fragment = null;
if (0 == position) {
fragment = new Fraglab1();
}
if (1 == position) {
fragment = new Fraglab2();
}
return fragment;
}
@Override
public int getCount() {
return 2;
}
@Override
public CharSequence getPageTitle(int position) {
switch (position) {
case 0:
return "动态";
case 1:
return "头条";
}
return null;
}
}
最最重要的一点!
在activity 里面我们经常是
getSupportFragmentManager()
来获取 fragmentmanger
但是在fragment里 需要
test2Adapter = new Test2Adapter(getChildFragmentManager());
因为现在是在fragment里面嵌套fragment 需要找到子fragment 的manger 如果
这样写
getActivity().getSupportFragmentManager()
获取到的是activity里面的 manger
工作时出现的bug 这里记录一下