一:簡單的實現viewpage進行fragment的滑動切換
- public class LcVpFragment extends Fragment{
- @Override
- public void onActivityCreated(Bundle savedInstanceState) {
- // TODO Auto-generated method stub
- super.onActivityCreated(savedInstanceState);
- List<Fragment> listviews = new ArrayList<Fragment>();
- TransFragment trs = new TransFragment();
- trs.setArguments(getArguments());//傳參數
- listviews.add(new NextPagerFragment());
- listviews.add(trs);
- listviews.add(new NextPagerFragment());
- ViewPager myviewpage = (ViewPager)getActivity().findViewById(R.id.trans_page);
- TransFragmentPagerAdapter mypagetadapter = new TransFragmentPagerAdapter(getActivity().getSupportFragmentManager(),listviews);
- myviewpage.setAdapter(mypagetadapter);
- }
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
- // TODO Auto-generated method stub
- return inflater.inflate(R.layout.myviewpager, container, false);
- //return super.onCreateView(inflater, container, savedInstanceState);
- }
- }
繼承Fragment適配器FragmentPagerAdapter,Fragment的適配器比較簡單
- public class TransFragmentPagerAdapter extends FragmentPagerAdapter {
- List<Fragment> fragments;
- public TransFragmentPagerAdapter(FragmentManager fm,List<Fragment> _fragments)
- {
- super(fm);
- this.fragments = _fragments;
- }
- public TransFragmentPagerAdapter(FragmentManager fm) {
- super(fm);
- // TODO Auto-generated constructor stub
- }
- @Override
- public Fragment getItem(int arg0) {
- // TODO Auto-generated method stub
- return fragments.get(arg0);
- }
- @Override
- public int getCount() {
- // TODO Auto-generated method stub
- return fragments.size();
- }
- }
二:利用viewpager滑動分頁1(不推薦,使用setCurrentItem(1)始終效果不理想,而且滑動後需要重新加載數據)
滑動分頁技巧,viewpager裏邊添加三個fragment,其中兩個先顯示進度條,
有三個fragment就可以向右向左滑動,以模擬上一頁下一頁,當滑動到其他頁就加載數據,加載完後設置myviewpage.setCurrentItem(1),
就又可以進行左右滑動了,由於設置myviewpage.setCurrentItem(1)不要有滑動效果不然用戶不友好,可以反射改變etCurrentItem(1)
的速度http://blog.csdn.NET/aojiancc2/article/details/40427207
這裏要主要幾點,viewpager進行fragment管理時生命週期是比如ViewPager有5個page,剛打開的時候,會加載page1和page2.....,我們手動切換到page2的時候,會加載page3,切換到page3的時候,加載page4的同時會destory掉page1
所以不要想到滑動到下一頁的時候會執行分頁fragment的創建方法,應該自己寫數據獲得方法,自己在滑動結束事件裏邊調用
1:創建分頁滑動viewpager主容器,這裏也是一個fragment
- public class LcVpFragment extends Fragment{
- @Override
- public void onActivityCreated(Bundle savedInstanceState) {
- // TODO Auto-generated method stub
- super.onActivityCreated(savedInstanceState);
- List<Fragment> listviews = new ArrayList<Fragment>();
- ViewPager myviewpage = (ViewPager)getActivity().findViewById(R.id.trans_page);
- TransFragment trs = new TransFragment();
- trs.setArguments(getArguments());//傳參數
- NextPagerFragment next =new NextPagerFragment(myviewpage,trs);
- next.setArguments(getArguments());
- NextPagerFragment previous =new NextPagerFragment(myviewpage,trs);
- previous.setArguments(getArguments());
- listviews.add(previous);
- listviews.add(trs);
- listviews.add(next);
- TransFragmentPagerAdapter mypagetadapter = new TransFragmentPagerAdapter(getActivity().getSupportFragmentManager(),listviews);
- myviewpage.setAdapter(mypagetadapter);
- myviewpage.setCurrentItem(1);
- MyOnPageChangeListener mo = new MyOnPageChangeListener(myviewpage,listviews);
- myviewpage.setOnPageChangeListener(mo);
- }
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
- // TODO Auto-generated method stub
- return inflater.inflate(R.layout.myviewpager, container, false);
- }
- }
2:爲viewpager設置滑動事件這裏很關鍵
- class MyOnPageChangeListener implements OnPageChangeListener
- {
- int currentpage = 1;
- ViewPager myviewpage;
- List<Fragment> listviews;
- public MyOnPageChangeListener(ViewPager _myviewpage,List<Fragment> _listviews)
- {
- listviews = _listviews;
- myviewpage = _myviewpage;
- }
- public void onPageScrollStateChanged(int arg0) {
- // TODO Auto-generated method stub
- }
- public void onPageScrolled(int _current, float arg1, int arg2) {
- }
- public void onPageSelected(int _current) {
- if(_current == 1)
- return;
- // TODO Auto-generated method stub
- if(_current==0)//上一頁
- {
- if(currentpage == 1)//已經是第一頁了
- {
- myviewpage.setCurrentItem(1);
- return;
- }
- currentpage--;
- }
- else if(_current==2)//下一頁
- {
- currentpage++;
- }
- //獲取到分頁fragment執行GetData查詢當前頁數據,然後把數據傳遞到展示數據的fragment在進行切換即可
- NextPagerFragment nex = (NextPagerFragment)listviews.get(_current);
- nex.GetData(currentpage);
- }
- }
3:分頁fragment
- public class NextPagerFragment extends Fragment{
- ViewPager myviewpage;
- TransFragment trs;
- public NextPagerFragment(ViewPager _myviewpage,TransFragment _trs)
- {
- myviewpage = _myviewpage;
- trs = _trs;
- }
- @Override
- public void onActivityCreated(Bundle savedInstanceState) {
- // TODO Auto-generated method stub
- super.onActivityCreated(savedInstanceState);
- }
- public void GetData(int current)
- {
- System.out.println("當前第幾頁:"+current);
- String phpsession = getArguments().getString("laravel_session");
- new TransportationData().getData_hp(phpsession,new Action()
- {
- public void action(String _data) {
- Message message = new Message();
- message.obj = _data;
- handler.sendMessage(message);
- }
- },current);
- }
- @SuppressLint("HandlerLeak")
- final Handler handler = new Handler(){
- public void handleMessage(Message msg) {
- trs.SetPageData(String.valueOf(msg.obj));//爲數據展示的fragment加載數據
- myviewpage.setCurrentItem(1);//然後進行切換
- }
- };
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
- // TODO Auto-generated method stub
- return inflater.inflate(R.layout.nextpager, container, false);
- }
- }
- public class TransFragment extends Fragment{
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
- // TODO Auto-generated method stub
- return inflater.inflate(R.layout.mytable_trans, container, false);
- //return super.onCreateView(inflater, container, savedInstanceState);
- }
- public void SetPageData(String _pagedata)
- {
- setData(String.valueOf(_pagedata));
- }
- public void setData(String _data)
- {
- //加載數據即可
- }
- @Override
- public void onActivityCreated(Bundle savedInstanceState) {
- // TODO Auto-generated method stub
- super.onActivityCreated(savedInstanceState);
- GetData();
- }
- }
http://www.cnblogs.com/tiantianbyconan/p/3364728.html
http://www.2cto.com/kf/201404/292031.html
三:利用viewpager滑動分頁2
其實viewpager添加多個fragment,利用他的加載方式可以很輕鬆的實現滑動分頁
1:加載需要分頁的fragment
- for(int i=0;i<4;i++)
- {
- Bundle bu = new Bundle();
- bu.putInt("cpage",i+1);
- TransFragment trs = new TransFragment();
- trs.setArguments(bu);
- listviews.add(trs);
- }
2:fragment
注意這裏fragment所有的控件都要後臺新生成,因爲都是用的同一個類,如果加載同一個佈局文件會有衝突
- LinearLayout layout;
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
- // TODO Auto-generated method stub
- layout=new LinearLayout(getActivity());
- ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(
- ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT);
- layout.setOrientation(LinearLayout.VERTICAL);//顯示方向
- layout.setLayoutParams(params);
- return layout;
- //return inflater.inflate(R.layout.mytable_trans, container, false);
- //return super.onCreateView(inflater, container, savedInstanceState);
- }
- @Override
- public void onActivityCreated(Bundle savedInstanceState) {
- // TODO Auto-generated method stub
- super.onActivityCreated(savedInstanceState);
- int cpage = getArguments().getInt("cpage");
- GetData(cpage);
- }
當然在需要的時候可以調用fragment集合,取出需要的fragment調用getdata方法,實現刷新,例如
- public void onPageSelected(int _current) {
- ((CargoinfoFragment) listviews.get(_current)).GetData(_current);
- }
當刪除了需要刷新時,可以在FragmentActivity類重新加載一次分頁的fragemt,但是要注意先把以前的刪除掉,不能數據可能會錯亂
- public void switchContent(Fragment fragment,boolean isdelete) {
- if(isdelete){
- List<Fragment> li = getSupportFragmentManager().getFragments();
- for(int i=0;i<li.size();i++)
- {
- Fragment f=li.get(i);
- System.out.println("類型:"+f.getClass());
- getSupportFragmentManager().beginTransaction().remove(f).commit();
- }
- }
- try{
- getSupportFragmentManager()
- .beginTransaction()
- .replace(R.id.bt,fragment)
- .addToBackStack("msg_fragment")//返回鍵不回來
- .commit();
- }
- catch(Exception e)
- {
- System.out.println("主類調用異常:"+e);
- }
- }