Android CardView的基本使用和Fragment

目录

CardView

  1. CardView的基本使用      

   2.CardView常见的使用方法以及其说明

   3.CardView与RecycleView的结合使用

        1.主布局文件 

        2.子布局文件 

        3.实体类

        4.适配器

        5.在主活动中使用

Fragment

        1.Fragment的简介

        总结一下:(重点)

        2.Fragment生命周期

        3.Fragment的静态加载

               1. 先创建一个Fragment

                 2.在创建的Fragment文件里操作

                3. 在Fragment所依赖的 Activity中的activity.xml文件中调用

            3.Fragment的动态加载

                       1.在activity_mian.xml文件中写

                        2.创建一个menu包

                         3.在包里面创建一个.xml文件,在文件下写

                        4.之后再创建三个Fragment,并且在他们的.xml文件上设置背景颜色

                        5.在Acticit中写以下代码


CardView

  1. CardView的基本使用      

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

   2.CardView常见的使用方法以及其说明

Android CardView的基本使用和Fragment_第1张图片

   3.CardViewRecycleView的结合使用

        1.主布局文件 




    

        2.子布局文件 

                这里运用到了CardView




    

        

        


    

        3.实体类

public class News {
    private int imgID;
    private String name;
    public News(int imgID,String name){
        this.name=name;
        this.imgID=imgID;
    }

    public int getImgID() {
        return imgID;
    }

    public String getName() {
        return name;
    }
}

        4.适配器

public class NewsAdapter extends RecyclerView.Adapter {
    List list;
    public NewsAdapter(List list){
        this.list=list;
    }
    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.news_item,parent,false);
        ViewHolder viewHolder=new ViewHolder(view);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        News news=list.get(position);
        holder.iv_img.setImageResource(news.getImgID());
        holder.tv_name.setText(news.getName());
    }

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

    public class ViewHolder extends RecyclerView.ViewHolder {
        ImageView iv_img;
        TextView tv_name;
        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            iv_img=itemView.findViewById(R.id.iv_img);
            tv_name=itemView.findViewById(R.id.tv_name);
        }
    }
}

        5.在主活动中使用

public class MainActivity3 extends AppCompatActivity {

    public String[] names={"你","好","啊","你","好","啊"};
    public int[] imgs={R.mipmap.touxiang1,R.mipmap.touxiang2,
            R.mipmap.touxiang3,R.mipmap.touxiang1,R.mipmap.touxiang2,R.mipmap.touxiang3,};

    RecyclerView rv_news;
    List list=new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main3);

        rv_news=findViewById(R.id.rv_news);
        initData();
        NewsAdapter newsAdapter=new NewsAdapter(list);
        LinearLayoutManager layoutManager=new LinearLayoutManager(this);
        rv_news.setLayoutManager(layoutManager);
        rv_news.setAdapter(newsAdapter);
    }

    private void initData() {
        for (int i=0;i

Fragment

        1.Fragment的简介

                Fragment译为碎片”,Fragment看起来和Activity一样,是一个用户界面。可以结合多个Fragments到一个activity中来构 建一个有多方面功能的UI,还可以重用同一个Fragment在多个activities中。Fragment可以当成是 activity的一个组件,每个Fragment有单独的生命周期,可以在activity运行时进行添加和移除 Fragment。因此,相比较于activityFragment更加轻量级,更加灵活。

一个 Fragment 总是被植入在一个 activity 中 ,并且其生命周期受其父 activity 直接影响,比如 activity处于暂停,则其中的 Fragment 都暂停; activity 销毁,则所有 Fragment 都销毁。但是,当 一个activity 运行时,你可以独立的操作每一个 Fragment ,比如添加和删除他们。进行类似的操作
时,可以将 Fragment 添加入被 activity 管理的后退栈中,这样用户可以通过点击返回按钮来返回之
前打开的 Fragment
Fragment 可以作为 activity 的一部分添加到布局文件中,通过声明元素作为 ViewGroup 的一部分。
也可以将 Fragment 作为一个没有自己 UI 的不可见的 activity 的工人。

        总结一下:(重点)

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

        2.Fragment生命周期

 

常见的周期流程
1. Activity 加载 Fragment 的时候,依次调用: onAttach() -> onCreate() -> onCreateView() ->
onActivityCreated() -> onStart() ->onResume()
2. 当做出一个悬浮的对话框风格的 Activity ,或者其他,就是让 Fragment 所在的 Activity 可见 , 但不获
得焦点: onPause()
3. 当对话框关闭, Activity 又获得了焦点: onResume() 4. 当替换 Fragment ,并调用 addToBackStack() 将它添加到 Back 栈中: onPause() -> onStop() -> onDestoryView() 。注意,此时的 Fragment 还没有被销毁哦。
5. 当按下键盘的回退键, Fragment 会再次显示出来: onCreateView() -> onActivityCreated() ->
onStart() -> onResume()
6. 如果替换后,在事务 commit 之前没有调用 addToBackStack() 方法将 Fragment 添加到 back 栈中,
或者退出了 Activity 的话,那么 Fragment 将会被完全结束, Fragment 会进入销毁状态: onPause()
-> onStop() -> onDestoryView() -> onDestory() -> onDetach()

        3.Fragment的静态加载

                        静态就是定义一个Fragment可以在很多个Activity使用

               1. 先创建一个Fragment

                        创建Fragment之前先创建一个包Fragment,这里面就放Fragment文件

Android CardView的基本使用和Fragment_第2张图片

                 2.在创建的Fragment文件里操作

                        我在里面设置了五个按钮

                        其中需要注意的有几个点:

1.一般写东西都是在onCreateView方法里面写的

 2.在onCreateView里面有这样的一句代码

 return inflater.inflate(R.layout.fragment_footer, container, false);

 如果你要写代码就必须要把它改成这样

 View view =inflater.inflate(R.layout.fragment_footer, container, false);

  在这里写代码

 return view;

3.在Fragment文件中发现this不能用,只需要把this改成getActivity()就可以了

  因为Fragment不能独立存在,他必须依赖于Activity

public class FooterFragment extends Fragment {
    private Button button,button2,button3,button4,button5;

    // 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;

    public FooterFragment() {
        // Required empty public constructor
    }

    /**
     * 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 FooterFragment.
     */
    // TODO: Rename and change types and number of parameters
    public static FooterFragment newInstance(String param1, String param2) {
        FooterFragment fragment = new FooterFragment();
        Bundle args = new Bundle();
        args.putString(ARG_PARAM1, param1);
        args.putString(ARG_PARAM2, param2);
        fragment.setArguments(args);
        return fragment;
    }

    @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
        View view=inflater.inflate(R.layout.fragment_footer, container, false);

        button=view.findViewById(R.id.button);
        button2=view.findViewById(R.id.button2);
        button3=view.findViewById(R.id.button3);
        button4=view.findViewById(R.id.button4);
        button5=view.findViewById(R.id.button5);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(getActivity(),"按钮1已被点击",Toast.LENGTH_SHORT).show();
            }
        });
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(getActivity(),"按钮2已被点击",Toast.LENGTH_SHORT).show();
            }
        });
        button3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(getActivity(),"按钮3已被点击",Toast.LENGTH_SHORT).show();
            }
        });
        button4.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(getActivity(),"按钮4已被点击",Toast.LENGTH_SHORT).show();
            }
        });
        button5.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(getActivity(),"按钮5已被点击",Toast.LENGTH_SHORT).show();
            }
        });

        return view;
    }
}

                        

                3. 在Fragment所依赖的 Activity中的activity.xml文件中调用




    

              

            3.Fragment的动态加载

                        动态加载就是在一个Activity中引用多个Fragment

                        我这里是用bottom navigation和Fragment的动态加载结合使用

                       1.在activity_mian.xml文件中写

具体代码可以在https://material.io/components/text-fields/android#using-text-fields

网站上找

 

                        2.创建一个menu包

Android CardView的基本使用和Fragment_第3张图片

 Android CardView的基本使用和Fragment_第4张图片

                         3.在包里面创建一个.xml文件,在文件下写

具体代码可以在https://material.io/components/text-fields/android#using-text-fields

网站上找

                             



    
    
    

                        4.之后再创建三个Fragment,并且在他们的.xml文件上设置背景颜色

                                                代码就不展示了

                        5.在Acticit中写以下代码

mport androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MenuItem;
import com.google.android.material.bottomnavigation.BottomNavigationView;
import com.hopu.day16_finalproject.fragment.Fragment1;
import com.hopu.day16_finalproject.fragment.Fragment2;
import com.hopu.day16_finalproject.fragment.Fragment3;

public class MainActivity extends AppCompatActivity {

    private BottomNavigationView bottom_navigation;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Fragment1 fragment1=new Fragment1();
        Fragment2 fragment2=new Fragment2();
        Fragment3 fragment3=new Fragment3();
        getSupportFragmentManager().beginTransaction().add(R.id.fv_fyl,fragment1).commit();

        bottom_navigation=findViewById(R.id.bottom_navigation);
        bottom_navigation.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                if (item.getItemId()==R.id.page_1){
                    getSupportFragmentManager().beginTransaction().replace(R.id.fv_fyl,fragment1).commit();
                }else if (item.getItemId()==R.id.page_2){
                    getSupportFragmentManager().beginTransaction().replace(R.id.fv_fyl,fragment2).commit();
                }else if (item.getItemId()==R.id.page_3){
                    getSupportFragmentManager().beginTransaction().replace(R.id.fv_fyl,fragment3).commit();
                }
                return true;
            }
        });
    }
}

你可能感兴趣的:(android)