一、Fragment簡介
在Android應用程序中,Fragment是一種可重用的組件,用於構建靈活的用戶界面。與Activity一樣,Fragment具有自己的用戶界面,不過它顯示在Activity的UI內。在同一個Activity中,可以同時使用多個Fragment,並且可以動態添加、移除、替換。Fragment的生命周期也是獨立的,因此它們可以根據需要進行管理。
二、Fragment切換方式
1、通過點擊按鈕切換
在Activity中添加一個按鈕,點擊按鈕時切換Fragment。關鍵代碼如下:
public class MainActivity extends AppCompatActivity { private Button button1, button2; private Fragment fragment1, fragment2; private FragmentManager fragmentManager; private FragmentTransaction transaction; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); fragmentManager = getSupportFragmentManager(); transaction = fragmentManager.beginTransaction(); //初始化Fragment1 fragment1 = new Fragment1(); transaction.replace(R.id.fragment_container, fragment1); transaction.commit(); button1 = (Button) findViewById(R.id.button1); button2 = (Button) findViewById(R.id.button2); //點擊Button1 button1.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { transaction = fragmentManager.beginTransaction(); fragment1 = new Fragment1(); transaction.replace(R.id.fragment_container, fragment1); transaction.commit(); } }); //點擊Button2 button2.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { transaction = fragmentManager.beginTransaction(); fragment2 = new Fragment2(); transaction.replace(R.id.fragment_container, fragment2); transaction.commit(); } }); } }
2、通過ViewPager切換
通過ViewPager實現Fragment之間的滑動切換,需要創建一個包含多個Fragment的FragmentPagerAdapter。關鍵代碼如下:
public class MainActivity extends AppCompatActivity { private PagerAdapter pagerAdapter; private ViewPager viewPager; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); viewPager = (ViewPager) findViewById(R.id.view_pager); pagerAdapter = new PagerAdapter(getSupportFragmentManager()); pagerAdapter.addFragment(new Fragment1(), "Fragment1"); pagerAdapter.addFragment(new Fragment2(), "Fragment2"); pagerAdapter.addFragment(new Fragment3(), "Fragment3"); viewPager.setAdapter(pagerAdapter); viewPager.setCurrentItem(0); } static class PagerAdapter extends FragmentPagerAdapter { private final List fragmentList = new ArrayList(); private final List fragmentTitleList = new ArrayList(); public PagerAdapter(FragmentManager fragmentManager) { super(fragmentManager); } public void addFragment(Fragment fragment, String title) { fragmentList.add(fragment); fragmentTitleList.add(title); } public Fragment getItem(int position) { return fragmentList.get(position); } public int getCount() { return fragmentList.size(); } public CharSequence getPageTitle(int position) { return fragmentTitleList.get(position); } } }
3、通過BottomNavigationView切換
在布局文件中添加BottomNavigationView,通過Java代碼監聽點擊事件,實現Fragment之間的切換。關鍵代碼如下:
public class MainActivity extends AppCompatActivity { private FragmentManager fragmentManager; private Fragment1 fragment1; private Fragment2 fragment2; private Fragment3 fragment3; private BottomNavigationView bottomNavigationView; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); fragmentManager = getSupportFragmentManager(); fragment1 = new Fragment1(); fragment2 = new Fragment2(); fragment3 = new Fragment3(); FragmentTransaction transaction = fragmentManager.beginTransaction(); transaction.add(R.id.fragment_container, fragment1, "fragment1"); transaction.add(R.id.fragment_container, fragment2, "fragment2"); transaction.add(R.id.fragment_container, fragment3, "fragment3"); transaction.hide(fragment2); transaction.hide(fragment3); transaction.commit(); bottomNavigationView = (BottomNavigationView) findViewById(R.id.bottom_navigation); bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() { public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) { FragmentTransaction transaction = fragmentManager.beginTransaction(); switch (menuItem.getItemId()) { case R.id.navigation_home: transaction.hide(fragment2); transaction.hide(fragment3); transaction.show(fragment1); transaction.commit(); return true; case R.id.navigation_dashboard: transaction.hide(fragment1); transaction.hide(fragment3); transaction.show(fragment2); transaction.commit(); return true; case R.id.navigation_notifications: transaction.hide(fragment1); transaction.hide(fragment2); transaction.show(fragment3); transaction.commit(); return true; } return false; } }); } }
三、Fragment結合使用
在Android應用中,我們經常使用Fragment結合使用。例如,如果我們要實現一個應用,要求在不同的Fragment之間傳遞數據,那麼應該怎麼做呢?
1、向Fragment傳遞數據
在Activity中調用Fragment的構造函數,向Fragment傳遞數據。關鍵代碼如下:
public class MainActivity extends AppCompatActivity { private String data = "Hello, Fragment!"; private Fragment fragment; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); fragment = new Fragment1(data); } } public class Fragment1 extends Fragment { private String data; private TextView textView; public Fragment1(String data) { this.data = data; } public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment1, container, false); textView = (TextView) view.findViewById(R.id.textView); textView.setText(data); return view; } }
2、從Fragment獲取數據
通過在Fragment中定義介面,讓Activity來實現這個介面,從而獲取Fragment的數據。關鍵代碼如下:
public class MainActivity extends AppCompatActivity implements Fragment1.OnFragmentInteractionListener { private Fragment1 fragment1; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); fragment1 = new Fragment1(); getSupportFragmentManager().beginTransaction().replace(R.id.container, fragment1).commit(); } public void onFragmentInteraction(Uri uri) { //獲取Fragment中的數據 String data = fragment1.getData(); } } public class Fragment1 extends Fragment { private OnFragmentInteractionListener mListener; public Fragment1() { } public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment1, container, false); return view; } public String getData() { //獲取數據並返回 return "Hello"; } public interface OnFragmentInteractionListener { void onFragmentInteraction(Uri uri); } }
四、總結
本文從Fragment的基本概念開始介紹,逐步展開到Fragment切換的三種方式以及Fragment結合使用的示例。希望本文能夠對你的學習有所幫助。
原創文章,作者:FAEDY,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/361252.html