Android Fragment实践(三) - ViewPager +Fragment实现页面滑动效果
简介:
Android系统中提供的ViewPager与Fragment一起使用,可以更加方便的管理每个Page的生命周期。最常用的场景是,在一个页面内,可以进行左右滑动,从而显示不同的内容。
本篇给出一个典型的ViewPager + Fragment,来实现这种滑动。
代码:
(1)Activity:
package com.test;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.support.design.widget.TabLayout;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentManager;import android.support.v4.app.FragmentTransaction;import android.support.v4.view.ViewPager;import android.support.v7.app.AppCompatActivity;import android.view.KeyEvent;import android.view.Window;import java.util.ArrayList;import java.util.Arrays;import java.util.List;import shu.shi.com.R;import shu.shi.com.shushi.MyFragment;import shu.shi.com.tools.MyLog;public class TestFragmentActivity extends AppCompatActivity { private static final String TAG = "ShushiHomeActivity_bak"; private List mFragmentList = new ArrayList(); //adapter TestAdaptor mTestAdaptor; //ui protected TabLayout mTabs; protected ViewPager mViewPager; /function begin/ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.test_activity_basic_main); initTabs(); //初始化frament initFragment(savedInstanceState); setViewPager(); } @Override protected void onResume() { super.onResume(); } @Override protected void onDestroy() { super.onDestroy(); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); FragmentManager manager = getSupportFragmentManager(); } private void initTabs() { mTabs = (TabLayout) findViewById(R.id.qa_tab); mViewPager = (ViewPager)findViewById(R.id.viewpager); mTabs.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { @Override public void onTabSelected(TabLayout.Tab tab) { int position = tab.getPosition(); MyLog.i(TAG,"====mTabs.getPosition()=======" +position); if (position >= 0) { CharSequence cs = tab.getText(); if (cs!=null && cs.length()>0) { String tabStr = cs.toString(); MyLog.i(TAG,"====mTabs.getPosition() tabStr=======" + tabStr); } } } @Override public void onTabUnselected(TabLayout.Tab tab) { } @Override public void onTabReselected(TabLayout.Tab tab) { } }); } ///fragment and list and scrool page / /** * 初始化fragment的记忆状态 * * @param savedInstanceState */ private void initFragment(Bundle savedInstanceState) { FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); if (savedInstanceState != null) { for (int i = 0; i< 5; i++) { String key = "MyFragment" + i; MyFragment fragment = (MyFragment)getSupportFragmentManager().getFragment(savedInstanceState, key); mFragmentList.add(fragment); } } else { for (int i = 0; i< 5; i++) { MyFragment fragment = new MyFragment(); mFragmentList.add(fragment); } } } /** * 填充ViewPager内容 */ private void setViewPager() { String[] titleName = { "C", "C++", "Java", "Python", "Go" }; mTestAdaptor = new TestAdaptor(getSupportFragmentManager(), mFragmentList,Arrays.asList(titleName)); mViewPager.setAdapter(mTestAdaptor); mTabs.setupWithViewPager(mViewPager); mTabs.setTabTextColors(getResources().getColor(R.color.white_00cccc), getResources().getColor(R.color.white)); } /** * 入口 * * @param activity */ public static void startAction(Activity activity) { Intent intent = new Intent(activity, TestFragmentActivity.class); activity.startActivity(intent); activity.overridePendingTransition(R.anim.quan_fade_in, R.anim.quan_fade_out); } exit/// @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { return true; } return super.onKeyDown(keyCode, event); }}
(2)frameng:
package shu.shi.com.shushi;import android.content.Context;import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v4.app.Fragment;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.TextView;import shu.shi.com.R;public class MyFragment extends Fragment { private static final String TAG = "MyFragment"; private View convertView; private TextView mTextView; @Override public void onAttach(Context context) { super.onAttach(context); } @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if (convertView == null) { convertView = inflater.inflate(R.layout.fragment_mytest, container, false); mTextView = convertView.findViewById(R.id.fragment_textview); } return convertView; } @Override public void onDetach() { super.onDetach(); }}
(4)fragment所在的布局文件:
(5)Adapter:用于适配fragment。
package com.test;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentManager;import android.support.v4.app.FragmentPagerAdapter;import java.util.ArrayList;import java.util.List;import shu.shi.com.scquan.utils.CollectionUtils;/** * Created by admin on 2017/11/30. */public class TestAdaptor extends FragmentPagerAdapter { protected List fragmentList = new ArrayList(); protected List mTitles; public TestAdaptor(FragmentManager manager, List listFrg, List mTitles) { super(manager); this.fragmentList = listFrg; this.mTitles = mTitles; } public TestAdaptor(FragmentManager manager, List fragmentList) { super(manager); this.fragmentList = fragmentList; } @Override public CharSequence getPageTitle(int position) { return !CollectionUtils.isNullOrEmpty(mTitles) ? mTitles.get(position) : ""; } @Override public Fragment getItem(int position) { return fragmentList.get(position); } @Override public int getCount() { return fragmentList.size(); } protected void setListFragment(List listFrg,List titles) { fragmentList = listFrg; mTitles = titles; }}
总结:使用viewpager+fragment,可以实现强大的页面滑动效果。