滑动换屏——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);
        }
    }

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

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

  

 

 

原文地址:https://www.cnblogs.com/969059506-java/p/3667575.html