項(xiàng)目需要的框架是上面是可滑動隱藏的頭布局,下面是滑動切換的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 里寫的 沒有考慮到解耦的問題
因?yàn)槭峭ㄟ^inflate 吹起來的view,操作代碼都需要在一個(gè)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);
這樣不利于擴(kuò)展和維護(hù)
所以采取用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.lxweimin.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 "動態(tài)";
case 1:
return "頭條";
}
return null;
}
}
最最重要的一點(diǎn)!
在activity 里面我們經(jīng)常是
getSupportFragmentManager()
來獲取 fragmentmanger
但是在fragment里 需要
test2Adapter = new Test2Adapter(getChildFragmentManager());
因?yàn)楝F(xiàn)在是在fragment里面嵌套fragment 需要找到子fragment 的manger 如果
這樣寫
getActivity().getSupportFragmentManager()
獲取到的是activity里面的 manger
工作時(shí)出現(xiàn)的bug 這里記錄一下