Android中ViewPager和Fragment的使用
GPT4.0+Midjourney绘画+国内大模型 会员永久免费使用!
【 如果你想靠AI翻身,你先需要一个靠谱的工具! 】
小案例
XML中
1 2 3 4 5 | < android.support.v4.view.ViewPager android:id = "@+id/viewPager" android:layout_width = "match_parent" android:layout_height = "match_parent" > </ android.support.v4.view.ViewPager > |
创建Fragment
1 2 3 4 5 6 7 8 9 | fragments = new ArrayList<>(); ConversationFragment fragment1 = new ConversationFragment(); GroupFragment fragment2 = new GroupFragment(); SearchFragment fragment3 = new SearchFragment(); fragments.add(fragment1); fragments.add(fragment2); fragments.add(fragment3); adapter = new MainPagerAdapter(getSupportFragmentManager(), fragments); viewPager.setAdapter(adapter); |
adapter
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | public class MainPagerAdapter extends FragmentPagerAdapter{ List<Fragment> fragmentList; public MainPagerAdapter(FragmentManager fm, List<Fragment> fragmentList) { super (fm); this .fragmentList = fragmentList; } @Override public Fragment getItem( int position) { return fragmentList.get(position); } @Override public int getCount() { return fragmentList.size(); } } |
OnPageChangeListener
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | viewPager.addOnPageChangeListener( new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled( int position, float positionOffset, int positionOffsetPixels) { int distance = positionOffsetPixels / 3 ; //一旦fragment滑动,这里的position实际是前一个的 ViewPropertyAnimator.animate(v_indicate_line).translationX(distance + position * v_indicate_line.getWidth()).setDuration( 0 ); } @Override public void onPageSelected( int position) { textLightAndSize(); } @Override public void onPageScrollStateChanged( int state) { } }); |
配合其他点击事件
1 2 3 4 5 6 7 8 9 10 11 12 | //这里是注意setCurrentItem的用法 switch (view.getId()) { case R.id.ly_conversation: viewPager.setCurrentItem( 0 ); break ; case R.id.ly_group: viewPager.setCurrentItem( 1 ); break ; case R.id.ly_search: viewPager.setCurrentItem( 2 ); break ; } |
官方案例
R.layout.fragment_pager
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | < LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android" android:orientation = "vertical" android:padding = "4dip" android:gravity = "center_horizontal" android:layout_width = "match_parent" android:layout_height = "match_parent" > < android.support.v4.view.ViewPager android:id = "@+id/pager" android:layout_width = "match_parent" android:layout_height = "0px" android:layout_weight = "1" > </ android.support.v4.view.ViewPager > < LinearLayout android:orientation = "horizontal" android:gravity = "center" android:measureWithLargestChild = "true" android:layout_width = "match_parent" android:layout_height = "wrap_content" android:layout_weight = "0" > < Button android:id = "@+id/goto_first" android:layout_width = "wrap_content" android:layout_height = "wrap_content" android:text = "@string/first" > </ Button > < Button android:id = "@+id/goto_last" android:layout_width = "wrap_content" android:layout_height = "wrap_content" android:text = "@string/last" > </ Button > </ LinearLayout > </ LinearLayout > |
R.layout.fragment_pager_list
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | < LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android" android:orientation = "vertical" android:layout_width = "match_parent" android:layout_height = "match_parent" android:background = "@android:drawable/gallery_thumb" > < TextView android:id = "@+id/text" android:layout_width = "match_parent" android:layout_height = "wrap_content" android:gravity = "center_vertical|center_horizontal" android:textAppearance = "?android:attr/textAppearanceMedium" android:text = "@string/hello_world" /> <!-- The frame layout is here since we will be showing either the empty view or the list view. --> < FrameLayout android:layout_width = "match_parent" android:layout_height = "0dip" android:layout_weight = "1" > <!-- Here is the list. Since we are using a ListActivity, we have to call it "@android:id/list" so ListActivity will find it --> < ListView android:id = "@android:id/list" android:layout_width = "match_parent" android:layout_height = "match_parent" android:drawSelectorOnTop = "false" /> <!-- Here is the view to show if the list is emtpy --> < TextView android:id = "@android:id/empty" android:layout_width = "match_parent" android:layout_height = "match_parent" android:textAppearance = "?android:attr/textAppearanceMedium" android:text = "No items." /> </ FrameLayout > </ LinearLayout > |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 | public class FragmentPagerSupport extends FragmentActivity { static final int NUM_ITEMS = 10 ; MyAdapter mAdapter; ViewPager mPager; @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.fragment_pager); mAdapter = new MyAdapter(getSupportFragmentManager()); mPager = (ViewPager)findViewById(R.id.pager); mPager.setAdapter(mAdapter); // Watch for button clicks. Button button = (Button)findViewById(R.id.goto_first); button.setOnClickListener( new OnClickListener() { public void onClick(View v) { mPager.setCurrentItem( 0 ); } }); button = (Button)findViewById(R.id.goto_last); button.setOnClickListener( new OnClickListener() { public void onClick(View v) { mPager.setCurrentItem(NUM_ITEMS- 1 ); } }); } public static class MyAdapter extends FragmentPagerAdapter { public MyAdapter(FragmentManager fm) { super (fm); } @Override public int getCount() { return NUM_ITEMS; } @Override public Fragment getItem( int position) { return ArrayListFragment.newInstance(position); } } public static class ArrayListFragment extends ListFragment { int mNum; /** * Create a new instance of CountingFragment, providing "num" * as an argument. */ static ArrayListFragment newInstance( int num) { ArrayListFragment f = new ArrayListFragment(); // Supply num input as an argument. Bundle args = new Bundle(); args.putInt( "num" , num); f.setArguments(args); return f; } /** * When creating, retrieve this instance's number from its arguments. */ @Override public void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); mNum = getArguments() != null ? getArguments().getInt( "num" ) : 1 ; } /** * The Fragment's UI is just a simple text view showing its * instance number. */ @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.fragment_pager_list, container, false ); View tv = v.findViewById(R.id.text); ((TextView)tv).setText( "Fragment #" + mNum); return v; } @Override public void onActivityCreated(Bundle savedInstanceState) { super .onActivityCreated(savedInstanceState); setListAdapter( new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, Cheeses.sCheeseStrings)); } @Override public void onListItemClick(ListView l, View v, int position, long id) { Log.i( "FragmentList" , "Item clicked: " + id); } } } |
注意
3.0之前的Activity是不能用fragment的。为了能使用fragment(supportV4中),才有了FragmentActivity。FragmentActivity继承的Activity。
以上就是本文的全部内容,希望对大家学习Android软件编程有所帮助。
- android 中viewpager+fragment仿微信底部TAG完美渐变
- Android 开发之BottomBar+ViewPager+Fragment实现炫酷的底部导航效果
- Android App中使用ViewPager+Fragment实现滑动切换效果
- Android App中ViewPager与Fragment结合的一些问题解决
- Android App在ViewPager中使用Fragment的实例讲解
- Android中ViewPager获取当前显示的Fragment
- Android基于ViewPager Fragment实现选项卡
- Android中ViewPager实现滑动指示条及与Fragment的配合
- Android实现Tab布局的4种方式(Fragment+TabPageIndicator+ViewPager)
- Android仿微信Viewpager-Fragment惰性加载(lazy-loading)
![](http://files.jb51.net/skin/2018/images/jb51ewm.png)
微信公众号搜索 “ 脚本之家 ” ,选择关注
程序猿的那些事、送书等活动等着你
相关文章
Android实现绘制LocationMarkerView图的示例代码
LocationMarker是运动轨迹上Start、End, 以及整公里点上笔者自定义绘制的一个MarkerView。这篇文章主要介绍了Android实现绘制LocationMarkerView图的示例代码,希望对大家有所帮助2023-02-02android studio生成aar包并在其他工程引用aar包的方法
本篇文章主要介绍了android studio生成aar包并在其他工程引用aar包的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2017-11-11
最新评论