一、引包问题
app包下的fragment不兼容2.3以下的版本,v4包兼容
二、静态加载fragment
1、定义fragment的布局
2、自定义一个fragment类,需要继承fragment或者其他子类,重写onCreateView()的方法
3、在需要加载Fragment的Activity对应的布局文件中添加fragment的标签
代码如下:
<!--fragment布局--> <?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#23b7ce"> <TextView android:layout_width="match_parent" android:layout_height="match_parent" android:text="@string/app_index"/> </LinearLayout> </android.support.constraint.ConstraintLayout>
新建fragment布局文件(layout下添加)
三、动态加载fragment(在Java代码中动态加载fragment,activity 不变,切换fragment)
1、获得FragmentManager对象(用来管理fragment)常用方法如下:
beginTranscation 开始业务操作
findFragmentBtId 根据ID找到对应的fragment
findfragmentByTag 根据标签查找gragment
popBackStack 调用此函数将fragment弹出栈
addOnBackStackChangeListener 注册一个监听后台堆栈变化的Listener
2、获得FragmentTranscation对象
对fragment进行添加、移除、替换以及执行其他操作,常用方法如下:
add、replace、remove、hide、show、addToBackStack(按返回键返回上一个framgent)、commit(提交业务)
3、调用add方法或者replace方法加载Fragment对象
4、调用commit方法来提交事物
动态添加fragment过程:
第一步:在layout下创建两个fragment(fragment_a,Bfragment_b)
第二步:在java代码创建两个fragment的类(Afragment,Bfragment)
第三步:在主布局文件中添加fragmentlayout标签,创建两个点击按钮
第四步:在MainActivity代码中创建按钮点击的监听事件,在onclick()中动态加载fragment(先获取fragmentmanager,然后开始一个事物)
代码如下:
<?xml version="1.0" encoding="utf-8"?> 本代码为创建Afragment <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:layout_width="match_parent" android:layout_height="match_parent" android:text="@string/frameA"/> </LinearLayout> </android.support.constraint.ConstraintLayout>
<?xml version="1.0" encoding="utf-8"?> 本代码为创建bfragment <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:layout_width="match_parent" android:layout_height="match_parent" android:text="@string/frameB"/> </LinearLayout> </android.support.constraint.ConstraintLayout>
AFragment类的创建
package com.example.administrator.motherbaby; import android.content.Context; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; public class AFragment extends Fragment { private Context mcontext; @Override public void onAttach(Context context) { super.onAttach(context); mcontext = context; } @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_a,container,false); //return super.onCreateView(inflater, container, savedInstanceState); } @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); //当Fragment的视图创建完成后回调 } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); //做数据的处理 } @Override public void onDestroyView() { super.onDestroyView(); } @Override public void onDestroy() { super.onDestroy(); } }
BFragment类的创建
package com.example.administrator.motherbaby; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; public class BFragment extends Fragment { @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_b,container,false); //return super.onCreateView(inflater, container, savedInstanceState); } }
主Activity Main创建
package com.example.administrator.motherbaby; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; public class MainActivity extends AppCompatActivity implements View.OnClickListener { private Button aBtn,bBtn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); aBtn = (Button) findViewById(R.id.btn_a); bBtn = (Button) findViewById(R.id.btn_b); aBtn.setOnClickListener(this); bBtn.setOnClickListener(this); } @Override public void onClick(View v) { FragmentManager supportFragmentManager = getSupportFragmentManager(); FragmentTransaction fragmentTransaction = supportFragmentManager.beginTransaction(); switch (v.getId()){ case R.id.btn_a: fragmentTransaction.replace(R.id.fragment_content,new AFragment()); break; case R.id.btn_b: fragmentTransaction.replace(R.id.fragment_content,new BFragment()); break; } fragmentTransaction.commit(); } }