• 第三十三篇-TabLayout的使用


    效果图:

    最上方是一个TabLayout,有三个部分,新闻、财经、娱乐,下方是一个ViewPaper,里面包含三个fragment,分别对应三个xml和java class。

      第一个Fragment里面是文本信息TextView。

      第二个Fragment里面是按钮Button。

      第三个Fragment里面是图片信息。

    首先,我们先来写一个主页面,包含两部分,TabLayout和ViewPaper

    ViewPaper介绍:

      ViewPager继承ViewGroup。看官网描述,这货和Fragment是好搭档,Fragment有自己的生命周期。也就是说ViewPager更适用复杂的视图切换,而且Viewpager有自己的adapter,这也让其适应复杂对象,实现数据的动态加载。

    然后,分别设计3个fragment.xml

    1、里面是一个文本信息,如果要设置文本信息的显示内容,有两种方式,一种是直接在text里面写入字符串,另一种是在主程序.java中动态设置内容。

    2、里面是一个button,如果想要为Button添加效果的话,可以在第二个Fragment的Java class 添加单击事件,效果图中就是简单添加了一个广播事件。

    添加单击事件:

    Button button=view1.findViewById(R.id.button);
    button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    Toast.makeText(getActivity(),"您正在浏览财经页面",Toast.LENGTH_SHORT).show();
    }
    });

    3、里面是一个图片信息,添加ImageView组件。

    接着,对应这三个layout编写3个java class

    public class MyFragment1 extends Fragment {
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view1=inflater.inflate(R.layout.layout_page1,container,false);
    return view1;
    }
    }

    注意extends后面的Fragment要选择v4的那一个,如果不确定的话,可以看它对应的layout文件中那个组件写的是什么。三个java class只需要变动layout_page1那个地方,它是这个java class对应的layout文件。2,3分别改为layout_page2,layout_page3,这些是layout的名字。对于MyFragment2.java可以将button那一段也添加进去。

    此时,文件都建好了,但是它们除了layout和.java联系上以外,fragment还没有和页面联系上。

    最后,要修改主程序的内容。

    先定义一个fragment集合List<Fragment>fragments;表示一个list集合里面存放的是fragment类型。

      举一个例子:

      java中<>表示使用泛型,Array<List<String>>表示的意思是一个数组里面存放的是list集合,而该list集合中存储的是字符串类型的数据。在java中<>表示使用泛型,是用来规定存入集合中的类型一致的技  术,他使得集合必须存储数据类型一致的数据,这样在从集合中取数据时,就不需要强转数据类型,而是通过你给定的泛型类自动转换类型!

    然后,将我们之前写好的3个fragment java class文件添加进去

    fragments=new ArrayList<>();
    fragments.add(new MyFragment1());
    fragments.add(new MyFragment2());
    fragments.add(new MyFragment3());

    关于new ArrayList<>()的用法可以参考:https://www.cnblogs.com/PeterZhang1520389703/p/6763170.html

    接着,创建一个adapter类,并定义一个adapter添加到viewpaper,目的是将viewpaper和fragment连接起来。

    private class adapter extends FragmentPagerAdapter{
    private List<Fragment>list;

    public adapter(FragmentManager fm,List<Fragment> list) {
    super(fm);
    this.list=list;
    }

    @Override
    public Fragment getItem(int position) {
    return list.get(position);
    }

    @Override
    public int getCount() {
    return list.size();
    }

    @Nullable
    @Override
    public CharSequence getPageTitle(int position) {
    return title[position];
    }
    }

    其中,参数中List<Fragment>>list是我们自己添加进去的,并且在其中定义private List<Fragment>list使它等于我们传入的参数,可以看出,它返回了位置信息,大小信息。最后,我们就可以引用这个类了。

    adapter adapter=new adapter(getSupportFragmentManager(),fragments);
    viewPager.setAdapter(adapter);
    tabLayout.setupWithViewPager(viewPager);

    setupWithViewPaper就是将tabLayout和viewPaper联系起来了。

    附上完整代码。

    main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:orientation="vertical"
        android:layout_height="match_parent"
        tools:context=".MainActivity">
    
        <android.support.design.widget.TabLayout
            android:id="@+id/tablayout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
    
            <!--<android.support.design.widget.TabItem-->
                <!--android:layout_width="wrap_content"-->
                <!--android:layout_height="wrap_content"-->
                <!--android:text="Left" />-->
    
            <!--<android.support.design.widget.TabItem-->
                <!--android:layout_width="wrap_content"-->
                <!--android:layout_height="wrap_content"-->
                <!--android:text="Center" />-->
    
            <!--<android.support.design.widget.TabItem-->
                <!--android:layout_width="wrap_content"-->
                <!--android:layout_height="wrap_content"-->
                <!--android:text="Right" />-->
        </android.support.design.widget.TabLayout>
    
        <android.support.v4.view.ViewPager
            android:id="@+id/viewpaper"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </LinearLayout>
    View Code

    layout_page1.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:gravity="center"
        android:layout_height="match_parent">
    
        <TextView
            android:id="@+id/textView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="TextView" />
    </LinearLayout>
    View Code

    layout_page2.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:gravity="center"
        android:layout_height="match_parent">
    
        <Button
            android:id="@+id/button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Button" />
    </LinearLayout>
    View Code

    layout_page3.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:gravity="center"
        android:layout_height="match_parent">
    
        <ImageView
            android:id="@+id/imageView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            app:srcCompat="@mipmap/ic_launcher" />
    </LinearLayout>
    View Code

    MainActivity.java

    package com.example.aimee.tablayouttest;
    
    import android.support.annotation.Nullable;
    import android.support.design.widget.TabLayout;
    import android.support.v4.app.Fragment;
    import android.support.v4.app.FragmentManager;
    import android.support.v4.app.FragmentPagerAdapter;
    import android.support.v4.view.ViewPager;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class MainActivity extends AppCompatActivity {
        TabLayout tabLayout;
        ViewPager viewPager;
        List<Fragment>fragments;
        String[] title={"新闻","财经","娱乐"};
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            tabLayout=findViewById(R.id.tablayout);
            viewPager=findViewById(R.id.viewpaper);
            fragments=new ArrayList<>();
            fragments.add(new MyFragment1());
            fragments.add(new MyFragment2());
            fragments.add(new MyFragment3());
            adapter adapter=new adapter(getSupportFragmentManager(),fragments);
            viewPager.setAdapter(adapter);
            tabLayout.setupWithViewPager(viewPager);
        }
        private class adapter extends FragmentPagerAdapter{
            private List<Fragment>list;
    
            public adapter(FragmentManager fm,List<Fragment> list) {
                super(fm);
                this.list=list;
            }
    
            @Override
            public Fragment getItem(int position) {
                return list.get(position);
            }
    
            @Override
            public int getCount() {
                return list.size();
            }
    
            @Nullable
            @Override
            public CharSequence getPageTitle(int position) {
                return title[position];
            }
        }
    }
    View Code

    MyFragment1.java

    package com.example.aimee.tablayouttest;
    
    import android.os.Bundle;
    import android.support.annotation.NonNull;
    import android.support.annotation.Nullable;
    import android.support.v4.app.Fragment;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    
    public class MyFragment1 extends Fragment {
        @Nullable
        @Override
        public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
            View view1=inflater.inflate(R.layout.layout_page1,container,false);
            return view1;
        }
    }
    View Code

    MyFragment2.java

    package com.example.aimee.tablayouttest;
    
    import android.os.Bundle;
    import android.support.annotation.NonNull;
    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.Button;
    import android.widget.Toast;
    
    public class MyFragment2 extends Fragment {
        @Nullable
        @Override
        public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
            View view1=inflater.inflate(R.layout.layout_page2,container,false);
            Button button=view1.findViewById(R.id.button);
            button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(getActivity(),"您正在浏览财经页面",Toast.LENGTH_SHORT).show();
                }
            });
            return view1;
        }
    }
    View Code

    MyFragment3.java

    package com.example.aimee.tablayouttest;
    
    import android.os.Bundle;
    import android.support.annotation.NonNull;
    import android.support.annotation.Nullable;
    import android.support.v4.app.Fragment;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    
    public class MyFragment3 extends Fragment {
        @Nullable
        @Override
        public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
            View view1=inflater.inflate(R.layout.layout_page3,container,false);
            return view1;
        }
    }
    View Code

    OK。

  • 相关阅读:
    7.15的一些小练习
    关于turtle画蟒蛇小实例
    Javascript我学之四作用域
    Javascript我学之三函数的参数
    Javascript我学之二函数定义
    JavaScript我学之一变量类型
    叩响C#之门-继承
    《C#高级编程》之泛型--1创建泛型类
    VB6 仿.netWinfrom控件 Anchor属性类
    新写了XmlFile类
  • 原文地址:https://www.cnblogs.com/smart-zihan/p/9952873.html
Copyright © 2020-2023  润新知