zoukankan      html  css  js  c++  java
  • 滑动换屏——Fragment

     

    首先,肯定是创建好main_activity的布局文件

    整个布局就是一个LinearLayout,在LinearLayout中要用一个ViewPager(ViewPager必须写全称android.support.v4.view.ViewPager)

    代码如下:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
      
      <!-- ViewPager的使用必须是完整的名字哦 -->  
      <android.support.v4.view.ViewPager     
          android:id="@+id/viewpager"
          android:layout_width="fill_parent"
          android:layout_height="match_parent"/>
    </LinearLayout>

     然后,想实现的是滑动换屏,当然要是多屏了的,所以不用想就知道肯定要有多个fragment了。

      插播一下fragment与Activity的关系:fragment英文意思是片段,也就是说fragment是Activity的片段 ,一个Activity可以有多个片段——fragment,所以我们想实现一个Activity的滑动换屏就要有多个fragment,并借助ViewPager滑动切换效果来实现了

      既然想用多个fragment,就需要多个fragment布局嘛,所以接下来,就在写两个(想要几个切换就要几个布局)期望的布局啦,分别是/res/layout/layout1.xml)和(/res/layout/layout2.xml

    /res/layout/layout1.xml

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" 
        android:background="#ff0000">
        <TextView
            android:id="@+id/TextView1" 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:text="Fragment1"/> 
    </LinearLayout>

    /res/layout/layout2.xml

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" 
        android:background="#ff0000">
        <TextView
            android:id="@+id/TextView2" 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:text="Fragment2"/> 
    </LinearLayout>

    现在有了布局,下面肯定是需要把他们联系在一起了。

    所以给fragment准备一下,生成Fragment1和Fragment2两个类来拓展(extends)Fragment。这里就只写一个了

    代码如下:

    public class Fragment1 extends Fragment {
            
            private View layout = null;
            
            @Override
            public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
            }
    
            @Override
            public View onCreateView(LayoutInflater inflater, ViewGroup container,
                    Bundle savedInstanceState) {
                /*下面的代码不行就记住,正像生成自定义控件那样
                *LayoutInflater.from(context).inflate(R.layout., this);
                *这样写就可以了
                *我也是新手,哈哈
                **/
                this.layout = inflater.inflate(R.layout.layout1, null);
                
                //从这里到return之间,你可以为这个Fragment添加其功能。比如设置一些组件的功能
                
    
               
                return this.layout;
            }
         }

    写到这就觉得缺点什么,我的fragment都准备好了,可是准备好了似乎我没有用啊,所以接下来就是把这些准备好的东西用上了。

    接下来这里有两步,第一步,当然这就像listView一样,生成一个适配器嘛。其实可以总结一下他们用适配器的共同特点,似乎就是有了多个元素,且每一个元素都要对号入座的时候就要适配一下。第二步,就是有了适配器,肯定是在MainActivity这个类中要给ViewPager加上啊!本来这两步可以在一个源文件中做,但是咱是java啊,就封装一下,尽量下次再用嘛。

    那么代码如下:

    public class FragmentAdapter extends FragmentPagerAdapter{
            
            //这个是存放两个Fragment的数组及包含Fragment1、Fragment2,要从MainActivity中传过来
            private ArrayList<Fragment> fragmentArray;
            
            //自己添加一个构造函数从MainActivity中接收这个Fragment数组,
            public FragmentAdapter(FragmentManager fm, ArrayList<Fragment> fragmentArray) {
                //调用自己的含有一个参数的构造函数
                this(fm);
                //接收Fragment数组
                this.fragmentArray = fragmentArray;
            }
            
            public FragmentAdapter(FragmentManager fm) {
                //调用父类的含有一个参数的构造函数,感觉this就是自己的一个引用,super就父类的一个引用
                super(fm);
            }
            
            //这个函数的作用是当切换到第arg0个页面的时候调用。
            @Override
            public Fragment getItem(int arg0) {
                return this.fragmentArray.get(arg0);
            }
    
            @Override
            public int getCount() {
                return this.fragmentArray.size();
            }
        }

    好的第一步完成,以后就可以直接拿来用了。

    第二步开始:

    public class MainActivity extends FragmentActivity {
            
            private ViewPager viewPager = null;
            
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
                //在onCreate方法中调用自己写的函数
                initViewPager();
            
            }
    
        private void initViewPager() {
                //获取到ViewPager的实例
                this.viewPager = (ViewPager)findViewById(R.id.viewpager);
                
                //构造好存放Fragment的数组
                ArrayList<Fragment> fragmentArray = new ArrayList<Fragment>();
                fragmentArray.add(new Fragment1());
                fragmentArray.add(new Fragment2());
                
                //为ViewPager设置适配器
                viewPager.setAdapter(new FragmentAdapter(getSupportFragmentManager(), fragmentArray));
                
                //设置当前显示的页面,Fragment1自然为0,Fragment2为1,这其实是fragmentArray中的索引的数
                viewPager.setCurrentItem(0);
            }
        }

    现在,就基本上实现了滑动换屏。

    哈哈,今天是不是又是有点收获的愉快的一天呢?

      

     

     

  • 相关阅读:
    随机二分图
    城市旅行
    JZPKIL
    线性基专题总结
    杜教筛专题总结
    [NOI2018]你的名字
    P1120 小木棍 [数据加强版]
    先序遍历
    P1736 创意吃鱼法
    P2258 子矩阵
  • 原文地址:https://www.cnblogs.com/969059506-java/p/3667575.html
Copyright © 2011-2022 走看看