欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android?Fragment實現(xiàn)頂部、底部導航欄

 更新時間:2022年09月05日 11:10:03   作者:Mondarzy  
這篇文章主要為大家詳細介紹了Android?Fragment實現(xiàn)頂部、底部導航欄,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

前言

無論是頂部還是底部導航欄,都是大多數(shù)APP的標配,網(wǎng)絡上的相關實現(xiàn)教程也非常之多。最近回憶起以前寫的小項目,發(fā)現(xiàn)對這塊內(nèi)容有些遺忘,不妨就再整理一遍代碼邏輯,記錄下來,方便日后查閱(指復制粘貼)。

實現(xiàn)的方式有很多,本文采用以下方式實現(xiàn):

  • 底部導航欄:Fragment + BottomNavigationView
  • 頂部導航欄:Fragment + ViewPager2 + TabLayout

底部導航欄

<布局文件>

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
? ? android:layout_width="match_parent"
? ? android:layout_height="match_parent"
? ? xmlns:app="http://schemas.android.com/apk/res-auto">

? ? <FrameLayout
? ? ? ? android:id="@+id/main_page_controller"
? ? ? ? android:layout_width="match_parent"
? ? ? ? android:layout_height="match_parent"
? ? ? ? android:layout_marginBottom="50dp"
? ? ? ? android:background="#EFEEEE"/>

? ? <com.google.android.material.bottomnavigation.BottomNavigationView
? ? ? ? android:id="@+id/main_navigation_bar"
? ? ? ? android:layout_width="match_parent"
? ? ? ? android:layout_height="50dp"
? ? ? ? android:layout_alignParentBottom="true"
? ? ? ? android:background="#ffffff"
? ? ? ? app:itemIconTint="@color/navigation_bar_color"
? ? ? ? app:itemTextColor="@color/navigation_bar_color"
? ? ? ? app:labelVisibilityMode="labeled"
? ? ? ? app:menu="@menu/navigation_items"/>

</RelativeLayout>

<menu文件>

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
? ? <item
? ? ? ? android:id="@+id/home"
? ? ? ? android:icon="@mipmap/home"
? ? ? ? android:title="首頁"/>
? ? <item
? ? ? ? android:id="@+id/plan"
? ? ? ? android:icon="@mipmap/plan"
? ? ? ? android:title="日程"/>
? ? <item
? ? ? ? android:id="@+id/game"
? ? ? ? android:icon="@mipmap/game"
? ? ? ? android:title="娛樂"/>
? ? <item
? ? ? ? android:id="@+id/setting"
? ? ? ? android:icon="@mipmap/setting"
? ? ? ? android:title="設置"/>
</menu>

<MainActivity.java>

public class MainActivity extends AppCompatActivity {

? ? private BottomNavigationView mNavigationView;

? ? private FragmentManager mFragmentManager;

? ? private Fragment[] fragments;
? ? private int lastFragment;

? ? @Override
? ? protected void onCreate(Bundle savedInstanceState) {
? ? ? ? super.onCreate(savedInstanceState);
? ? ? ? setContentView(R.layout.activity_main);
? ? ? ? mNavigationView = findViewById(R.id.main_navigation_bar);
? ? ? ? initFragment();
? ? ? ? initListener();
? ? }

? ? private void initFragment() {
? ? ? ? HomeFragment mHomeFragment = new HomeFragment();
? ? ? ? PlanFragment mPlanFragment = new PlanFragment();
? ? ? ? GameFragment mGameFragment = new GameFragment();
? ? ? ? SettingFragment mSettingFragment = new SettingFragment();
? ? ? ? fragments = new Fragment[]{mHomeFragment, mPlanFragment, mGameFragment, mSettingFragment};
? ? ? ? mFragmentManager = getSupportFragmentManager();
? ? ? ? //默認顯示HomeFragment
? ? ? ? mFragmentManager.beginTransaction()
? ? ? ? ? ? ? ? .replace(R.id.main_page_controller, mHomeFragment)
? ? ? ? ? ? ? ? .show(mHomeFragment)
? ? ? ? ? ? ? ? .commit();
? ? }

? ? private void initListener() {
? ? ? ? mNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
? ? ? ? ? ? @Override
? ? ? ? ? ? public boolean onNavigationItemSelected(@NonNull MenuItem item) {
? ? ? ? ? ? ? ? switch (item.getItemId()) {
? ? ? ? ? ? ? ? ? ? case R.id.home:
? ? ? ? ? ? ? ? ? ? ? ? if (lastFragment != 0) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? MainActivity.this.switchFragment(lastFragment, 0);
? ? ? ? ? ? ? ? ? ? ? ? ? ? lastFragment = 0;
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? return true;
? ? ? ? ? ? ? ? ? ? case R.id.plan:
? ? ? ? ? ? ? ? ? ? ? ? if (lastFragment != 1) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? MainActivity.this.switchFragment(lastFragment, 1);
? ? ? ? ? ? ? ? ? ? ? ? ? ? lastFragment = 1;
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? return true;
? ? ? ? ? ? ? ? ? ? case R.id.game:
? ? ? ? ? ? ? ? ? ? ? ? if (lastFragment != 2) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? MainActivity.this.switchFragment(lastFragment, 2);
? ? ? ? ? ? ? ? ? ? ? ? ? ? lastFragment = 2;
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? return true;
? ? ? ? ? ? ? ? ? ? case R.id.setting:
? ? ? ? ? ? ? ? ? ? ? ? if (lastFragment != 3) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? MainActivity.this.switchFragment(lastFragment, 3);
? ? ? ? ? ? ? ? ? ? ? ? ? ? lastFragment = 3;
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? return true;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? return false;
? ? ? ? ? ? }
? ? ? ? });
? ? }

? ? private void switchFragment(int lastFragment, int index) {
? ? ? ? FragmentTransaction transaction = mFragmentManager.beginTransaction();
? ? ? ? transaction.hide(fragments[lastFragment]);
? ? ? ? if (!fragments[index].isAdded()){
? ? ? ? ? ? transaction.add(R.id.main_page_controller,fragments[index]);
? ? ? ? }
? ? ? ? transaction.show(fragments[index]).commitAllowingStateLoss();
? ? }

}

<實現(xiàn)效果>

頂部導航欄

<布局文件>

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
? ? android:layout_width="match_parent"
? ? android:layout_height="match_parent"
? ? xmlns:app="http://schemas.android.com/apk/res-auto"
? ? android:orientation="vertical">

? ? <com.google.android.material.tabs.TabLayout
? ? ? ? android:id="@+id/home_indicator"
? ? ? ? android:layout_width="match_parent"
? ? ? ? android:layout_height="30dp"
? ? ? ? app:tabGravity="fill" />

? ? <androidx.viewpager2.widget.ViewPager2
? ? ? ? android:id="@+id/home_pager"
? ? ? ? android:layout_width="match_parent"
? ? ? ? android:layout_height="match_parent"/>

</LinearLayout>

<ViewPgaer2適配器>

public class HomePagerAdapter extends FragmentStateAdapter {

? ? private List<String> mData = new ArrayList<>();

? ? public HomePagerAdapter(@NonNull FragmentActivity fragmentActivity, List<String> data) {
? ? ? ? super(fragmentActivity);
? ? ? ? mData = data;
? ? }

? ? @NonNull
? ? @Override
? ? public Fragment createFragment(int position) {
? ? ? ? return HomePageFragment.newInstance(mData.get(position));
? ? }

? ? @Override
? ? public int getItemCount() {
? ? ? ? return mData.size();
? ? }
}

<HomeFragment.java>

public class HomeFragment extends Fragment {

? ? private TabLayout mTabLayout;
? ? private ViewPager2 mViewPager2;
? ? private List<String> mData = new ArrayList<>();

? ? @Override
? ? public void onCreate(Bundle savedInstanceState) {
? ? ? ? super.onCreate(savedInstanceState);
? ? }

? ? @Override
? ? public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
? ? ? ? View rootView = inflater.inflate(R.layout.fragment_home, container, false);
? ? ? ? initData();
? ? ? ? initView(rootView);
? ? ? ? return rootView;
? ? }

? ? private void initView(View rootView) {
? ? ? ? mTabLayout = rootView.findViewById(R.id.home_indicator);
? ? ? ? mViewPager2 = rootView.findViewById(R.id.home_pager);
? ? ? ? HomePagerAdapter homePagerAdapter = new HomePagerAdapter(getActivity(), mData);
? ? ? ? mViewPager2.setAdapter(homePagerAdapter);
? ? ? ? new TabLayoutMediator(mTabLayout, mViewPager2, new TabLayoutMediator.TabConfigurationStrategy() {
? ? ? ? ? ? @Override
? ? ? ? ? ? public void onConfigureTab(@NonNull TabLayout.Tab tab, int position) {
? ? ? ? ? ? ? ? tab.setText(mData.get(position));
? ? ? ? ? ? }
? ? ? ? }).attach();
? ? }

? ? private void initData() {
? ? ? ? mData.add("頁面1");
? ? ? ? mData.add("頁面2");
? ? ? ? mData.add("頁面3");
? ? ? ? mData.add("頁面4");
? ? ? ? mData.add("頁面5");
? ? }

}

<HomePageFragment.java>

public class HomePageFragment extends Fragment {

? ? private static final String ARG_PARAM1 = "param1";

? ? private String mParam1;

? ? private TextView textView;

? ? public HomePageFragment() {

? ? }

? ? public static HomePageFragment newInstance(String param1) {
? ? ? ? HomePageFragment fragment = new HomePageFragment();
? ? ? ? Bundle args = new Bundle();
? ? ? ? args.putString(ARG_PARAM1, param1);
? ? ? ? fragment.setArguments(args);
? ? ? ? return fragment;
? ? }

? ? @Override
? ? public void onCreate(Bundle savedInstanceState) {
? ? ? ? super.onCreate(savedInstanceState);
? ? ? ? if (getArguments() != null) {
? ? ? ? ? ? mParam1 = getArguments().getString(ARG_PARAM1);
? ? ? ? }
? ? }

? ? @Override
? ? public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
? ? ? ? View rootView = inflater.inflate(R.layout.fragment_home_page, container, false);
? ? ? ? textView = rootView.findViewById(R.id.home_page_tv);
? ? ? ? textView.setText(mParam1);
? ? ? ? return rootView;
? ? }
}

<實現(xiàn)效果>

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Android自定義View實現(xiàn)球形動態(tài)加速球

    Android自定義View實現(xiàn)球形動態(tài)加速球

    這篇文章主要為大家詳細介紹了Android自定義View實現(xiàn)球形動態(tài)加速球,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • Android對話框使用方法詳解

    Android對話框使用方法詳解

    這篇文章主要介紹了Android對話框使用方法,包括提示對話框、單選對話框、復選對話框、列表對話框等,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • 淺析Android文件存儲

    淺析Android文件存儲

    本文詳細介紹了android的外部存儲和私有存儲。大家在有保存文件的需求的時候,根據(jù)自己的需要,選擇到底是存在哪里比較合適。內(nèi)部存儲相對較小,不介意把一些大文件存在其中。應該存在外部存儲會更好。對于可以給其他文件訪問的,可以存在外部存儲的公有文件里面
    2021-06-06
  • Android TextView實現(xiàn)跑馬燈效果的方法

    Android TextView實現(xiàn)跑馬燈效果的方法

    這篇文章主要介紹了Android TextView跑馬燈效果實現(xiàn)方法,涉及Android布局文件中相關屬性的設置技巧,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-01-01
  • 深入Android Handler與線程間通信ITC的詳解

    深入Android Handler與線程間通信ITC的詳解

    本篇文章是對Android的Handler與線程間通信ITC進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • Android仿qq頂部消息欄效果

    Android仿qq頂部消息欄效果

    這篇文章主要介紹了Android仿qq頂部消息欄效果,需要的朋友可以參考下
    2018-04-04
  • Android動畫 實現(xiàn)開關按鈕動畫(屬性動畫之平移動畫)實例代碼

    Android動畫 實現(xiàn)開關按鈕動畫(屬性動畫之平移動畫)實例代碼

    這篇文章主要介紹了Android動畫 實現(xiàn)開關按鈕動畫(屬性動畫之平移動畫)實例代碼的相關資料,需要的朋友可以參考下
    2016-11-11
  • Android基于hover組件實現(xiàn)監(jiān)控鼠標移動事件的方法

    Android基于hover組件實現(xiàn)監(jiān)控鼠標移動事件的方法

    這篇文章主要介紹了Android基于hover組件實現(xiàn)監(jiān)控鼠標移動事件的方法,結合實例形式分析了hover組件監(jiān)控鼠標光標在view上變化的操作技巧,需要的朋友可以參考下
    2017-02-02
  • Android簡易音樂播放器實現(xiàn)代碼

    Android簡易音樂播放器實現(xiàn)代碼

    這篇文章主要為大家詳細介紹了Android簡易音樂播放器的實現(xiàn)代碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • 全面解析Android中對EditText輸入實現(xiàn)監(jiān)聽的方法

    全面解析Android中對EditText輸入實現(xiàn)監(jiān)聽的方法

    這篇文章主要介紹了Android中對EditText輸入實現(xiàn)監(jiān)聽的方法,包括一個仿iOS的帶清除功能的ClearEditText輸入框控件的詳細使用介紹,需要的朋友可以參考下
    2016-04-04

最新評論