Android多頁面 ViewPager+Fragment 簡單應用

ViewPager+Fragment簡單應用

利用ViewPager+Fragment實現多頁面

在這裏插入圖片描述

  1. 創建四個Fragment
    在這裏插入圖片描述在每個佈局中載入對應layout
    在這裏插入圖片描述
    其中的一個代碼,其他類似
public class IndexFragment extends Fragment {
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_index,container,false);
        return view;
    }
}
  1. 在activity_main.xml中添加ViewPager,四個TextView
<?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:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <androidx.viewpager.widget.ViewPager
        android:id="@+id/vp_fragment"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"/>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:background="#009688">

        <TextView
            android:id="@+id/tv_index"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:layout_gravity="center"
            android:layout_marginLeft="30dp"
            android:textSize="25sp"
            android:text="首頁"/>

        <TextView
            android:id="@+id/tv_phone"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:layout_gravity="center"
            android:textSize="25sp"
            android:text="通訊錄"/>

        <TextView
            android:id="@+id/tv_disc"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:layout_gravity="center"
            android:textSize="25sp"
            android:text="發現"/>

        <TextView
            android:id="@+id/tv_me"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:layout_gravity="center"
            android:textSize="25sp"
            android:text="我"/>
    </LinearLayout>

</LinearLayout>
  1. 創建FragmentAdapter類,繼承FragmentPagerAdapter
    原理跟ListView類似
public class FragmentAdapter extends FragmentPagerAdapter {
    private List<Fragment> list;
    public FragmentAdapter(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();
    }
}
  1. 在MainActivity中實現
public class MainActivity extends AppCompatActivity {
    private ViewPager viewPager;
    private FragmentAdapter adapter;
    private List<Fragment> list;
    private TextView tvIndex;
    private TextView tvPhone;
    private TextView tvDisc;
    private TextView tvMe;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        viewPager = findViewById(R.id.vp_fragment);
        tvIndex = findViewById(R.id.tv_index);
        tvPhone = findViewById(R.id.tv_phone);
        tvDisc = findViewById(R.id.tv_disc);
        tvMe = findViewById(R.id.tv_me);

        list = new ArrayList<>();
        list.add(new IndexFragment());list.add(new PhoneFragment());
        list.add(new DiscFragment());list.add(new MeFragment());
        adapter = new FragmentAdapter(getSupportFragmentManager(), list);
        viewPager.setAdapter(adapter);

        viewPager.setCurrentItem(0);
        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
                switch (position) {
                    case 0:
                        tvIndex.setTextColor(Color.RED);
                        tvPhone.setTextColor(Color.WHITE);
                        tvDisc.setTextColor(Color.WHITE);
                        tvMe.setTextColor(Color.WHITE);
                        break;
                    case 1:
                        tvPhone.setTextColor(Color.RED);
                        tvIndex.setTextColor(Color.WHITE);
                        tvDisc.setTextColor(Color.WHITE);
                        tvMe.setTextColor(Color.WHITE);
                        break;
                    case 2:
                        tvDisc.setTextColor(Color.RED);
                        tvIndex.setTextColor(Color.WHITE);
                        tvPhone.setTextColor(Color.WHITE);
                        tvMe.setTextColor(Color.WHITE);
                        break;
                    case 3:
                        tvMe.setTextColor(Color.RED);
                        tvIndex.setTextColor(Color.WHITE);
                        tvPhone.setTextColor(Color.WHITE);
                        tvDisc.setTextColor(Color.WHITE);
                        break;
                    default:
                        break;
                }
            }

            @Override
            public void onPageSelected(int position) {

            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });
    }
}

完成

發佈了20 篇原創文章 · 獲贊 6 · 訪問量 4912
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章