原创内容,转载请注明原文网址:http://homeqin.cn/a/wenzhangboke/jishutiandi/Android/2019/0825/616.html
Fragment常用的三个类:
android.app.Fragment 要紧用于定义Fragment
android.app.FragmentManager 要紧用于在Activity中操纵Fragment
android.app.FragmentTransaction 包管少许列Fragment操纵的原子性
获取常州微信小程序开发FragmentManage的方式:
getFragmentManager()
getSupportFragmentManager //v4中FragmentActivity
要紧的操纵都是FragmentTransaction的要领
FragmentTransaction transaction = fm.benginTransatcion();//开启一个事务
transaction.add() //往Activity中增加一个Fragment
transaction.remove() //从Activity中移除一个Fragment,要是被移除的Fragment没有增加到回退栈(回退栈背面会细致说),这个Fragment实例将会被烧毁。
transaction.replace()//应用另一个Fragment替代目前的,实际上即是remove()而后add()的合体~
transaction.hide() //当你的fragment数目固定很少时潜藏目前的Fragment,仅仅是设为不行见,并不会烧毁,多的时候可能出现OOM异常,
transaction.show()//表现之前潜藏的Fragment
detach()会将view从UI中移除,和remove()差别,此时fragment的状况仍然由FragmentManager保护。
attach()重建view视图,附加到UI上并表现。
transatcion.co毫米it()//提交一个事务
要是你稀饭应用Fragment,必然要清楚这些要领,哪一个会烧毁视图,哪一个会烧毁实例,哪一个仅仅只是潜藏,这样才能更好的应用它们。
a、好比:我常州网站开发建设在FragmentA中的EditText填了少许数据,当切换到FragmentB时,要是有望会到A还能看到数据,则适用你的即是hide和show;
也即是说,有望保存用户操纵的面板,你可以应用hide和show,固然了不要用力在那new实例,举行下非null校验。
b、再好比:我不有望保存用户操纵,你可以应用remove(),而后add();大概应用replace()这个和remove,add是相像的结果。
c、remove和detach有一点渺小的差别,在不思量回退栈的环境下,remove会烧毁全部Fragment实例,而detach则只是烧毁其视图布局,实例并不会被烧毁。
辣么二者怎么取舍应用呢?要是你确目前Activity一直存在,辣么在不有望保存用户操纵的时候,你可以优先应用detach。
复制代码
1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
2 xmlns:tools="http://schemas.android.com/tools"
3 android:id="@+id/activity_main"
4 android:layout_width="match_parent"
5 android:layout_height="match_parent"
6 android:orientation="vertical"
7 tools:context="com.example.lesson10_fragment2.MainActivity">
8
9 <Button
10 android:id="@+id/btn_add"
11 android:layout_width="match_parent"
12 android:layout_height="wrap_content"
13 android:onClick="add"
14 android:text="增加Fragment"
15 android:textAllCaps="false" />
16
17 <Button
18 android:id="@+id/btn_remove"
19 android:layout_width="match_parent"
20 android:layout_height="wrap_content"
21 android:onClick="remove"
22 android:text="移除Fragment"
23 android:textAllCaps="false" />
24
25 <Button
26 android:layout_width="match_parent"
27 android:layout_height="wrap_content"
28 android:onClick="replace"
29 android:text="替代Fragment"
30 android:textAllCaps="false" />
31
32 <Button
33 android:id="@+id/btn_attach"
34 android:layout_width="match_parent"
35 android:layout_height="wrap_content"
36 android:onClick="attach"
37 android:text="附加Fragment"
38 android:textAllCaps="false" />
39
40 <Button
41 android:id="@+id/btn_detach"
42 android:layout_width="match_parent"
43 android:layout_height="wrap_content"
44 android:onClick="detach"
45 android:text="移除附加Fragment"
46 android:textAllCaps="false" />
47
48 <Button
49 android:id="@+id/btn_show"
50 android:layout_width="match_parent"
51 android:layout_height="wrap_content"
52 android:onClick="show"
53 android:text="表现Fragment"
54 android:textAllCaps="false" />
55
56 <Button
57 android:id="@+id/btn_hide"
58 android:layout_width="match_parent"
59 android:layout_height="wrap_content"
60 android:onClick="hide"
61 android:text="潜藏Fragment"
62 android:textAllCaps="false" />
63
64 <!--动静加载,必须要给定一个空间用来加载Fragment 必须是一个FrameLayout !-->
65 <FrameLayout
66 android:id="@+id/fl_content"
67 android:layout_width="match_parent"
68 android:layout_height="wrap_content">
69
70 </FrameLayout>
71 </LinearLayout>
复制游戏开发运营代码
复制代码
1 public class TextFragment extends Fragment {
2
3 @Override
4 public void onAttach(Context context) {
5 super.onAttach(context);
6 Log.e("TAG","----TextFragment-----onAttach");
7 }
8
9 @Override
10 public void onCreate(@Nullable Bundle savedInstanceState) {
11 super.onCreate(savedInstanceState);
12 Log.e("TAG","----TextFragment-----onCreate");
13 }
14
15 @Nullable
16 @Override
17 public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
18 Log.e("TAG","----TextFragment-----onCreateView");
19 EditText et = new EditText(getActivity());
20 et.setHint("动静加载的text");
21 return et;
22 }
23
24 @Override
25 public void onStart() {
26 super.onStart();
27 Log.e("TAG","----TextFragment-----onStart");
28 }
29
30 @Override
31 public void onActivityCreated(@Nullable Bundle savedInstanceState) {
32 super.onActivityCreated(savedInstanceState);
33 Log.e("TAG","----TextFragment-----onActivityCreated");
34 }
35
36 @Override
37 public void onResume() {
38 super.onResume();
39 Log.e("TAG","----TextFragment-----onResume");
40 }
41
42 @Override
43 public void onPause() {
44 super.onPause();
45 Log.e("TAG","----TextFragment-----onPause");
46 }
47
48 @Override
49 public void onStop() {
50 super.onStop();
51 Log.e("TAG","----TextFragment-----onStop");
52 }
53
54 @Override
55 public void onDestroyView() {
56 super.onDestroyView();
57 Log.e("TAG","----TextFragment-----onDestroyView");
58 }
59
60 @Override
61 public void onDestroy() {
62 super.onDestroy();
63 Log.e("TAG","----TextFragment-----onDestroy");
64 }
65
66 @Override
67 public void onDetach() {
68 super.onDetach();
69 Log.e("TAG","----TextFragment-----onDetach");
70 }
71 }
复制代码
复制代码
1 public class ImageFragment extends Fragment{
2
3 @Nullable
4 @Override
5 public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
6 ImageView img = new ImageView(getActivity());
7 img.setImageResource(R.mipmap.ic_launcher);
8 return img;
9 }
10 }
复制代码
复制常州手游开发代码
1 public class MainActivity extends AppCompatActivity {
2
3 TextFragment textFragment;
4 ImageFragment imgFragment;
5 @Override
6 protected void onCreate(Bundle savedInstanceState) {
7 super.onCreate(savedInstanceState);
8 setContentView(R.layout.activity_main);
9
10 textFragment = new TextFragment();
11 imgFragment = new ImageFragment();
12 }
13
14 public void add(View v){
15 //建立事务
16 FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
17 //操纵指令
18 ft.add(R.id.fl_content,textFragment);
19 //提交事务
20 ft.co毫米it();
21 }
22 public void remove(View v){
23 FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
24 //从Activity中移除一个Fragment,要是被移除的Fragment没有增加到回退栈(回退栈背面会细致说),这个Fragment实例将会被烧毁。
25 ft.remove(textFragment);
26 ft.co毫米it();
27 }
28
29 public void replace(View v){
30 FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
31 //应用另一个Fragment替代目前的,实际上即是remove()而后add()的合体
32 ft.replace(R.id.fl_content,imgFragment);
33 ft.co毫米it();
34 }
35
36 public void attach(View v){
37 FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
38 //重建视图,附件到UI上并表现
39 ft.attach(textFragment);
40 ft.co毫米it();
41 }
42 public void detach(View v){
43 FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
44 //会将view从UI中移除,和remove()差别,此时fragment的状况仍然由FragmentManager保护
45 ft.detach(textFragment);
46 ft.co毫米it();
47 }
48 public void show(View v){
49 FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
50 //表现之前潜藏的Fragment
51 ft.show(textFragment);
52 ft.co毫米it();
53 }
54 public void hide(View v){
55 FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
56 //当你的fragment数目固定很少时潜藏目前的Fragment,仅仅是设为不行见,并不会烧毁
57 ft.hide(textFragment);
58 ft.co毫米it();
59 }
60 }
复制代码
上篇:上一篇:Spinner初始化监听 onItemSelected实行两次
下篇:下一篇:java底层简介Map下