Android studio 实现选项卡功能

实现所需要的class跟xml
1.本身的activity 配戴着xml
2.需要几个选项 就new 几个Fragement 每个Fragement都会配戴一个xml
3.new 一个java类别 取名叫FragmentAdapter 并继承extends FragmentStateAdapter

先附上本身的activity码

package com.example.myapplication;import androidx.appcompat.app.AppCompatActivity;import androidx.fragment.app.FragmentManager;import androidx.viewpager2.widget.ViewPager2;import android.os.Bundle;import com.google.android.material.tabs.TabLayout;public class MainActivity1_2 extends AppCompatActivity {    TabLayout tabLayout;    ViewPager2 viewPager2;    FragmentAdapter fragmentAdapter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main1_2);        tabLayout = findViewById(R.id.tab_layout);        viewPager2 = findViewById(R.id.view_pager2);        FragmentManager fm = getSupportFragmentManager();        fragmentAdapter = new FragmentAdapter(fm,getLifecycle());        //getLifecycle()是获取生命週期        viewPager2.setAdapter(fragmentAdapter);        //viewPager2 设定调配器 是 fragment调配器也是一个class 要带参数的class        tabLayout.addTab(tabLayout.newTab().setText("First"));        tabLayout.addTab(tabLayout.newTab().setText("two"));        tabLayout.addTab(tabLayout.newTab().setText("three"));        //tabLayout 增加三个按钮 并显示名字        tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {            @Override            public void onTabSelected(TabLayout.Tab tab) {                viewPager2.setCurrentItem(tab.getPosition());            }            @Override            public void onTabUnselected(TabLayout.Tab tab) {            }            @Override            public void onTabReselected(TabLayout.Tab tab) {            }        });            viewPager2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {                @Override                public void onPageSelected(int position) {                    tabLayout.selectTab(tabLayout.getTabAt(position));                }            });    }}

跟activity的xml

<?xml version="1.0" encoding="utf-8"?><RelativeLayout 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"    tools:context=".MainActivity1_2"><com.google.android.material.tabs.TabLayout    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:id="@+id/tab_layout"/>    <androidx.viewpager2.widget.ViewPager2        android:layout_width="match_parent"        android:layout_height="match_parent"        android:layout_below="@id/tab_layout"        android:id="@+id/view_pager2"/>        </RelativeLayout>

new 出来的Fragement 本身class 是不用修改的
但还是附上 其他的Fragement也是一样 所以我只贴上一个

package com.example.myapplication;import android.os.Bundle;import androidx.fragment.app.Fragment;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;/** * A simple {@link Fragment} subclass. * Use the {@link FirstFragement#newInstance} factory method to * create an instance of this fragment. * */public class FirstFragement extends Fragment {    // TODO: Rename parameter arguments, choose names that match    // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER    private static final String ARG_PARAM1 = "param1";    private static final String ARG_PARAM2 = "param2";    // TODO: Rename and change types of parameters    private String mParam1;    private String mParam2;    /**     * Use this factory method to create a new instance of     * this fragment using the provided parameters.     *     * @param param1 Parameter 1.     * @param param2 Parameter 2.     * @return A new instance of fragment FirstFragement.     */    // TODO: Rename and change types and number of parameters    public static FirstFragement newInstance(String param1, String param2) {        FirstFragement fragment = new FirstFragement();        Bundle args = new Bundle();        args.putString(ARG_PARAM1, param1);        args.putString(ARG_PARAM2, param2);        fragment.setArguments(args);        return fragment;    }    public FirstFragement() {        // Required empty public constructor    }    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        if (getArguments() != null) {            mParam1 = getArguments().getString(ARG_PARAM1);            mParam2 = getArguments().getString(ARG_PARAM2);        }    }    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container,                             Bundle savedInstanceState) {        // Inflate the layout for this fragment        return inflater.inflate(R.layout.fragment_first, container, false);    }}

Fragement的xml

<?xml version="1.0" encoding="utf-8"?><FrameLayout 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"    tools:context=".FirstFragement">    <!-- TODO: Update blank fragment layout -->    <TextView        android:layout_width="match_parent"        android:layout_height="match_parent"        android:text="第一个页面"        android:gravity="center"        /></FrameLayout>

最后的FragmentAdapter code 这边return
是我Fragment名称 共三个分别为
new FirstFragement();
new SecondFragment();
new ThirdFragment();
你有几个选项//Fragment 就需要在这边设定 跟case

package com.example.myapplication;import androidx.annotation.NonNull;import androidx.fragment.app.Fragment;import androidx.fragment.app.FragmentManager;import androidx.lifecycle.Lifecycle;import androidx.viewpager2.adapter.FragmentStateAdapter;public class FragmentAdapter extends FragmentStateAdapter {    public FragmentAdapter(@NonNull FragmentManager fragmentManager, @NonNull  Lifecycle lifecycle) {        super(fragmentManager, lifecycle);    }    //建构式的参数是片段经理 跟 生命週期    @NonNull    @Override    public Fragment createFragment(int position) {        switch (position){            case 1 :                return new SecondFragment();            case 2:                return new ThirdFragment();        }        return new FirstFragement();    }    @Override    public int getItemCount() {        return 3;    }}

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章