当前位置:   article > 正文

Android【CardView,DrawerLayout 滑动菜单,Fragment】_drawerlayout 加载fragment

drawerlayout 加载fragment

目录

1 CardView

1.1 CardView的基本使用

1.2基本使用方法:

2 DrawerLayout 滑动菜单 

3 Fragment

3.1 Fragment的概念

3.1.1 Fragment生命周期

3.2 Fragment的静态加载

3.3 Fragment的动态使用(CardView与RecycleView的结合使用)


1 CardView

1.1 CardView的基本使用

CardView 是用于实现卡片式布局效果的重要控件,实际上也是一个 frameLayout, 只是额外提供了圆角和阴影,看上去有立体效果。

1.2基本使用方法:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="wrap_content"
  5. xmlns:app="http://schemas.android.com/apk/res-auto">
  6. <LinearLayout
  7. android:layout_height="match_parent"
  8. android:layout_width="match_parent"
  9. android:orientation="vertical"
  10. android:gravity="center_horizontal"
  11. android:padding="5dp">
  12. <ImageView
  13. android:id="@+id/iv_img"
  14. android:layout_height="50dp"
  15. android:layout_width="50dp"
  16. android:src="@mipmap/laoyou"
  17. android:scaleType="fitXY"/>
  18. <TextView
  19. android:id="@+id/tv_title"
  20. android:layout_height="wrap_content"
  21. android:layout_width="wrap_content"
  22. android:text="旅游"
  23. android:layout_marginTop="3dp"/>
  24. </LinearLayout>

2 DrawerLayout 滑动菜单 

DrawerLayout 包含两个界面 , 一个主界面和一个隐藏界面。隐藏界面可以通过点击按钮或者滑动屏幕边缘显示出来,一般隐藏界面用来做菜单使用。
代码:
  1. <?xml version="1.0" encoding="utf-8"?> <androidx.drawerlayout.widget.DrawerLayout 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" tools:context=".MainActivity3">
  2. <TextView
  3. android:id="@+id/textView"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent"
  6. android:text="主界面" />
  7. <TextView
  8. android:id="@+id/textView2"
  9. android:layout_gravity="start"
  10. android:layout_width="match_parent"
  11. android:layout_height="match_parent"
  12. android:text="滑出页面"
  13. android:background="#fff"/>
  14. </androidx.drawerlayout.widget.DrawerLayout>

3 Fragment

3.1 Fragment的概念

        1. Fragment是依赖于 Activity 的,不能独立存在。
        2. 一个 Activity 里可以有多个 Fragment
        3. 一个 Fragment 可以被多个 Activity 重用。
        4. Fragment有自己的生命周期,并能接收输入事件。
        5. 可以在 Activity 运行时动态地添加或删除 Fragment

3.1.1 Fragment生命周期

Activity 加载 Fragment 的时候,依次调用:
onAttach() -> onCreate() -> onCreateView() ->onActivityCreated() -> onStart() ->onResume()

3.2 Fragment的静态加载

1. 定义 Fragment 的布局,就是 fragment 显示内容
fragment_footer.xml
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. tools:context=".fragment.FooterFragment">
  6. <TextView
  7. android:id="@+id/tv_footer"
  8. android:layout_width="match_parent"
  9. android:layout_height="80dp"
  10. android:background="#83A8C5"
  11. android:gravity="center"
  12. android:textSize="24dp"
  13. android:text="页尾" />
  14. </FrameLayout>
2. 自定义一个 Fragment 类,需要继承 Fragment 或者它的子类,重写 onCreateView() 方法,在该方法
中调用 inflater.inflate() 方法加载 Fragment 的布局文件,接着返回加载的 view 对象。
FooterFragment.java
  1. public class FooterFragment extends Fragment {
  2. // TODO: Rename parameter arguments, choose names that match
  3. // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
  4. private static final String ARG_PARAM1 = "param1";
  5. private static final String ARG_PARAM2 = "param2";
  6. // TODO: Rename and change types of parameters
  7. private String mParam1; private String mParam2;
  8. public FooterFragment() {
  9. // Required empty public constructor
  10. }
  11. /*** Use this factory method to create a new instance of
  12. * this fragment using the provided parameters.
  13. ** @param param1 Parameter 1.
  14. * @param param2 Parameter 2.
  15. * @return A new instance of fragment FooterFragment.
  16. */
  17. // TODO: Rename and change types and number of parameters
  18. public static FooterFragment newInstance(String param1, String param2) {
  19. FooterFragment fragment = new FooterFragment();
  20. Bundle args = new Bundle();
  21. args.putString(ARG_PARAM1, param1);
  22. args.putString(ARG_PARAM2, param2);
  23. fragment.setArguments(args);
  24. return fragment;
  25. }
  26. @Override public void onCreate(Bundle savedInstanceState) {
  27. super.onCreate(savedInstanceState);
  28. if (getArguments() != null) {
  29. mParam1 = getArguments().getString(ARG_PARAM1);
  30. mParam2 = getArguments().getString(ARG_PARAM2);
  31. }
  32. }
  33. @Override
  34. publicViewonCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState{
  35. // Inflate the layout for this fragment
  36. return inflater.inflate(R.layout.fragment_footer, container, false);
  37. }
  38. }
3. 在需要加载 Fragment Activity 对应的布局文件中添加 fragment 的标签,注意 name 属性是全限定
类名,就是要包含 Fragment 的包名。
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <RelativeLayout
  3. 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" tools:context=".MainActivity4">
  4. <fragment
  5. android:id="@+id/headerFragment"
  6. android:layout_width="match_parent"
  7. android:layout_height="80dp"
  8. android:layout_alignParentTop="true"
  9. android:name="com.hopu.cardviewdemo.fragment.HeaderFragment"/>
  10. <fragment
  11. android:id="@+id/footerFragment"
  12. android:layout_width="match_parent"
  13. android:layout_height="80dp"
  14. android:layout_alignParentBottom="true"
  15. android:name="com.hopu.cardviewdemo.fragment.FooterFragment"/>
  16. </RelativeLayout>
4. Activity onCreate( ) 方法中调用 setContentView() 加载布局文件。

3.3 Fragment的动态使用(CardViewRecycleView的结合使用)

1. activity_main.xml
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:app="http://schemas.android.com/apk/res-auto"
  4. xmlns:tools="http://schemas.android.com/tools"
  5. android:layout_width="match_parent"
  6. android:layout_height="match_parent"
  7. tools:context=".MainActivity">
  8. <FrameLayout
  9. android:id="@+id/fl"
  10. android:layout_width="match_parent"
  11. android:layout_height="match_parent"/>
  12. <com.google.android.material.bottomnavigation.BottomNavigationView
  13. android:id="@+id/bottom_navigation"
  14. android:layout_width="match_parent"
  15. android:layout_height="wrap_content"
  16. android:background="@color/white"
  17. android:layout_alignParentBottom="true"
  18. app:menu="@menu/bottom_navigation_menu" />
  19. </RelativeLayout>
2. 子布局CardView文件
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="wrap_content"
  5. xmlns:app="http://schemas.android.com/apk/res-auto">
  6. <LinearLayout
  7. android:layout_height="match_parent"
  8. android:layout_width="match_parent"
  9. android:orientation="vertical"
  10. android:gravity="center_horizontal"
  11. android:padding="5dp">
  12. <ImageView
  13. android:id="@+id/iv_img"
  14. android:layout_height="50dp"
  15. android:layout_width="50dp"
  16. android:src="@mipmap/laoyou"
  17. android:scaleType="fitXY"/>
  18. <TextView
  19. android:id="@+id/tv_title"
  20. android:layout_height="wrap_content"
  21. android:layout_width="wrap_content"
  22. android:text="旅游"
  23. android:layout_marginTop="3dp"/>
  24. </LinearLayout>
  25. </androidx.cardview.widget.CardView>
3. 创建 Fragment
  1. package com.wpw.socialapp.fragment;
  2. import android.graphics.Color;
  3. import android.os.Bundle;
  4. import androidx.fragment.app.Fragment;
  5. import androidx.recyclerview.widget.GridLayoutManager;
  6. import androidx.recyclerview.widget.LinearLayoutManager;
  7. import androidx.recyclerview.widget.RecyclerView;
  8. import androidx.viewpager2.widget.ViewPager2;
  9. import android.view.LayoutInflater;
  10. import android.view.View;
  11. import android.view.ViewGroup;
  12. import com.wpw.socialapp.R;
  13. import com.wpw.socialapp.adapter.AdsAdpter;
  14. import com.wpw.socialapp.adapter.NaviqationAdapter1;
  15. import com.wpw.socialapp.adapter.NaviqationAdapter2;
  16. import com.wpw.socialapp.adapter.NaviqationAdapter3;
  17. import com.wpw.socialapp.adapter.NaviqationAdapter4;
  18. import com.wpw.socialapp.model.Ads;
  19. import com.wpw.socialapp.model.Naviqation1;
  20. import com.wpw.socialapp.model.Naviqation2;
  21. import com.wpw.socialapp.model.Naviqation3;
  22. import com.wpw.socialapp.model.Naviqation4;
  23. import java.util.ArrayList;
  24. import java.util.List;
  25. public class ShouyeFragment extends Fragment {
  26. private int[] imgs={R.mipmap.g1,R.mipmap.g2};
  27. private List<Ads> list=new ArrayList<>();
  28. private ViewPager2 vp_ads;
  29. private int[] imgNavi1={R.mipmap.laoyou,R.mipmap.fuyou,R.mipmap.shangcan,R.mipmap.ziyuan};
  30. private String[] titles1={"老弱服务","伤残服务","妇幼服务","自愿服务"};
  31. private List<Naviqation1> listnavi1=new ArrayList<>();
  32. private RecyclerView rv_navigation1;
  33. @Override
  34. public View onCreateView(LayoutInflater inflater, ViewGroup container,
  35. Bundle savedInstanceState) {
  36. View view=inflater.inflate(R.layout.fragment_shouye, container, false);
  37. vp_ads=view.findViewById(R.id.vp_ads);
  38. list.clear();
  39. listnavi1.clear();
  40. info();
  41. AdsAdpter adsAdpter=new AdsAdpter(list);
  42. vp_ads.setAdapter(adsAdpter);
  43. rv_navigation1=view.findViewById(R.id.rv_navigation1);
  44. NaviqationAdapter1 naviqationAdapter1=new NaviqationAdapter1(listnavi1);
  45. GridLayoutManager layoutManager1=new GridLayoutManager(getActivity(),4);
  46. rv_navigation1.setLayoutManager(layoutManager1);
  47. rv_navigation1.setAdapter(naviqationAdapter1);
  48. return view;
  49. }
  50. private void info() {
  51. for (int i = 0; i < imgs.length; i++) {
  52. Ads ads=new Ads(imgs[i]);
  53. list.add(ads);
  54. }
  55. for (int i = 0; i < imgNavi1.length; i++) {
  56. Naviqation1 naviqation1=new Naviqation1(imgNavi1[i],titles1[i]);
  57. listnavi1.add(naviqation1);
  58. }
  59. }
  60. }
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:app="http://schemas.android.com/apk/res-auto"
  4. xmlns:tools="http://schemas.android.com/tools"
  5. android:layout_width="match_parent"
  6. android:layout_height="match_parent"
  7. android:orientation="vertical"
  8. android:background="#F1F0F0"
  9. tools:context=".fragment.ShouyeFragment">
  10. <androidx.viewpager2.widget.ViewPager2
  11. android:id="@+id/vp_ads"
  12. android:layout_width="match_parent"
  13. android:layout_height="170dp"/>
  14. <LinearLayout
  15. android:layout_below="@+id/vp_ads"
  16. android:layout_width="match_parent"
  17. android:layout_height="wrap_content"
  18. android:orientation="vertical"
  19. android:id="@+id/ll"
  20. android:background="@color/white">
  21. <androidx.recyclerview.widget.RecyclerView
  22. android:id="@+id/rv_navigation1"
  23. android:layout_width="match_parent"
  24. android:layout_height="80dp">
  25. </androidx.recyclerview.widget.RecyclerView>
  26. </LinearLayout>
  27. <androidx.recyclerview.widget.RecyclerView
  28. android:id="@+id/rv_navigation2"
  29. android:layout_width="match_parent"
  30. android:background="@color/white"
  31. android:layout_height="30dp"/>
  32. <androidx.recyclerview.widget.RecyclerView
  33. android:id="@+id/rv_navigation3"
  34. android:layout_marginTop="10dp"
  35. android:background="@color/white"
  36. android:layout_width="match_parent"
  37. android:layout_height="120dp"/>
  38. <ImageView
  39. android:layout_width="match_parent"
  40. android:layout_height="50dp"
  41. android:layout_marginTop="10dp"
  42. android:scaleType="fitXY"
  43. android:src="@mipmap/tuijian"/>
  44. <androidx.recyclerview.widget.RecyclerView
  45. android:id="@+id/rv_navigation4"
  46. android:background="@color/white"
  47. android:layout_width="match_parent"
  48. android:layout_height="200dp"/>
  49. </LinearLayout>
4. 创建 Fragment2
5. 在活动中,点击按钮后切换 Fragment
  1. package com.wpw.socialapp;
  2. import androidx.annotation.NonNull;
  3. import androidx.appcompat.app.AppCompatActivity;
  4. import android.os.Bundle;
  5. import android.view.MenuItem;
  6. import com.google.android.material.bottomnavigation.BottomNavigationView;
  7. import com.google.android.material.navigation.NavigationBarView;
  8. import com.wpw.socialapp.fragment.ShouyeFragment;
  9. import com.wpw.socialapp.fragment.WodeFragment;
  10. import com.wpw.socialapp.fragment.XiaoxiFragment;
  11. import com.wpw.socialapp.fragment.ZixunFragment;
  12. public class MainActivity extends AppCompatActivity {
  13. private BottomNavigationView bottom_navigation;
  14. @Override
  15. protected void onCreate(Bundle savedInstanceState) {
  16. super.onCreate(savedInstanceState);
  17. setContentView(R.layout.activity_main);
  18. bottom_navigation=findViewById(R.id.bottom_navigation);
  19. ShouyeFragment shouyeFragment=new ShouyeFragment();
  20. ZixunFragment zixunFragment=new ZixunFragment();
  21. getSupportFragmentManager().beginTransaction().add(R.id.fl,shouyeFragment).commit();
  22. bottom_navigation.setOnItemSelectedListener(new NavigationBarView.OnItemSelectedListener() {
  23. @Override
  24. public boolean onNavigationItemSelected(@NonNull MenuItem item) {
  25. if (item.getItemId()==R.id.page_1) {
  26. getSupportFragmentManager().beginTransaction().replace(R.id.fl,shouyeFragment).commit();
  27. }else if (item.getItemId()==R.id.page_2) {
  28. getSupportFragmentManager().beginTransaction().replace(R.id.fl,zixunFragment).commit();
  29. }
  30. return true;
  31. }
  32. });
  33. }
  34. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/279585
推荐阅读
相关标签
  

闽ICP备14008679号