• QQ
  • nahooten@sina.com
  • 常州市九洲新世界花苑15-2

Android

Android Fragment增加 FragmentTransaction

原创内容,转载请注明原文网址: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下