目录
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文件中写
3.在包里面创建一个.xml文件,在文件下写
4.之后再创建三个Fragment,并且在他们的.xml文件上设置背景颜色
5.在Acticit中写以下代码
这里运用到了CardView
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;
}
}
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);
}
}
}
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。因此,相比较于activity,Fragment更加轻量级,更加灵活。
一个 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文件
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包
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)