[转]关于fragment

版权声明:本文为博主原创文章,未经博主允许不得转载。



转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37970961



自从Fragment出现,曾经有段时间,感觉大家谈什么都能跟Fragment谈上关系,做什么都要问下Fragment能实现不
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
本篇博客力求为大家说明Fragment如何产生,什么是Fragment,Fragment生命周期,如何静态和动态的使用Fragment,Fragment回退栈,Fragment事务;以及Fragment的一些特殊用途,例如:没有布局的Fragment有何用处?Fragment如何与Activity交互?Fragment如何创建对话框?Fragment如何与ActionBar集成等等。
## ## ## <a></a><span>1、Fragment的产生与介绍</span>
<span></span>Android运行在各种各样的设备中,有小屏幕的手机,超大屏的平板甚至电视。针对屏幕尺寸的差距,很多情况下,都是先针对手机开发一套App,然后拷贝一份,修改布局以适应平板神马超级大屏的。难道无法做到一个App可以同时适应手机和平板么,当然了,必须有啊。Fragment的出现就是为了解决这样的问题。你可以把Fragment当成Activity的一个界面的一个组成部分,甚至Activity的界面可以完全有不同的Fragment组成,更帅气的是Fragment拥有自己的生命周期和接收、处理用户的事件,这样就不必在Activity写一堆控件的事件处理的代码了。更为重要的是,你可以动态的添加、替换和移除某个Fragment。
## ## ## <a></a><span>2、Fragment的生命周期</span>
<span></span>Fragment必须是依存与Activity而存在的,因此Activity的生命周期会直接影响到Fragment的生命周期。官网这张图很好的说明了两者生命周期的关系:
![](http://img.blog.csdn.net/20140719225005356?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG1qNjIzNTY1Nzkx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
可以看到Fragment比Activity多了几个额外的生命周期回调方法:
**onAttach(Activity)**
<span></span><span></span>当Fragment与Activity发生关联时调用。
**onCreateView(LayoutInflater, ViewGroup,Bundle)**
<span></span><span></span>创建该Fragment的视图
**onActivityCreated(Bundle)**
<span></span><span></span>当Activity的onCreate方法返回时调用
**onDestoryView()**
<span></span><span></span>与onCreateView想对应,当该Fragment的视图被移除时调用
**onDetach()**
<span></span><span></span>与onAttach相对应,当Fragment与Activity关联被取消时调用
注意:除了onCreateView,其他的所有方法如果你重写了,必须调用父类对于该方法的实现,
## ## ## <a></a><span>3、静态的使用Fragment</span>
嘿嘿,终于到使用的时刻了~~
这是使用Fragment最简单的一种方式,把Fragment当成普通的控件,直接写在Activity的布局文件中。步骤:
**1、继承Fragment,重写onCreateView决定Fragemnt的布局**
**2、在Activity中声明此Fragment,就当和普通的View一样**
下面展示一个例子(我使用2个Fragment作为Activity的布局,一个Fragment用于标题布局,一个Fragment用于内容布局):
TitleFragment的布局文件:
<div class="dp-highlighter bg_html"><div class="bar"><div class="tools">**[html]** [view plain](# "view plain")<span> [copy](# "copy")</span><div></div><span> [print](# "print")</span>[?](# "?")</div></div>
1. <span><span class="tag">&lt;?</span><span class="tag-name">xml</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">“1.0”</span><span>&nbsp;</span><span class="attribute">encoding</span><span>=</span><span class="attribute-value">“utf-8”</span><span class="tag">?&gt;</span><span>&nbsp;&nbsp;</span></span>
2. <span><span class="tag">&lt;</span><span class="tag-name">RelativeLayout</span><span>&nbsp;</span><span class="attribute">xmlns:android</span><span>=</span><span class="attribute-value">“http://schemas.android.com/apk/res/android”</span><span>&nbsp;&nbsp;</span></span>
3. <span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">android:layout_width</span><span>=</span><span class="attribute-value">“match_parent”</span><span>&nbsp;&nbsp;</span></span>
4. <span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">android:layout_height</span><span>=</span><span class="attribute-value">“45dp”</span><span>&nbsp;&nbsp;</span></span>
5. <span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">android:background</span><span>=</span><span class="attribute-value">“@drawable/title_bar”</span><span>&nbsp;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
6. <span>&nbsp;&nbsp;</span>
7. <span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">ImageButton</span><span>&nbsp;&nbsp;</span></span>
8. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">android:id</span><span>=</span><span class="attribute-value">“@+id/id_title_left_btn”</span><span>&nbsp;&nbsp;</span></span>
9. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">android:layout_width</span><span>=</span><span class="attribute-value">“wrap_content”</span><span>&nbsp;&nbsp;</span></span>
10. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">android:layout_height</span><span>=</span><span class="attribute-value">“wrap_content”</span><span>&nbsp;&nbsp;</span></span>
11. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">android:layout_centerVertical</span><span>=</span><span class="attribute-value">“true”</span><span>&nbsp;&nbsp;</span></span>
12. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">android:layout_marginLeft</span><span>=</span><span class="attribute-value">“3dp”</span><span>&nbsp;&nbsp;</span></span>
13. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">android:background</span><span>=</span><span class="attribute-value">“@drawable/showleft_selector”</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span>
14. <span>&nbsp;&nbsp;</span>
15. <span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">TextView</span><span>&nbsp;&nbsp;</span></span>
16. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">android:layout_width</span><span>=</span><span class="attribute-value">“fill_parent”</span><span>&nbsp;&nbsp;</span></span>
17. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">android:layout_height</span><span>=</span><span class="attribute-value">“fill_parent”</span><span>&nbsp;&nbsp;</span></span>
18. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">android:gravity</span><span>=</span><span class="attribute-value">“center”</span><span>&nbsp;&nbsp;</span></span>
19. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">android:text</span><span>=</span><span class="attribute-value">“我不是微信”</span><span>&nbsp;&nbsp;</span></span>
20. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">android:textColor</span><span>=</span><span class="attribute-value">“# fff”</span><span>&nbsp;&nbsp;</span></span>
21. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">android:textSize</span><span>=</span><span class="attribute-value">“20sp”</span><span>&nbsp;&nbsp;</span></span>
22. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">android:textStyle</span><span>=</span><span class="attribute-value">“bold”</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span>
23. <span>&nbsp;&nbsp;</span>
24. <span><span class="tag">&lt;/</span><span class="tag-name">RelativeLayout</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span><div class="save_code tracking-ad"><a>![](http://static.blog.csdn.net/images/save_snippets.png)</a></div></div><pre class="html">&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="45dp"
android:background="@drawable/title_bar" &gt;
&lt;ImageButton
android:id="@+id/id_title_left_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="3dp"
android:background="@drawable/showleft_selector" /&gt;
&lt;TextView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:text="我不是微信"
android:textColor="# fff"
android:textSize="20sp"
android:textStyle="bold" /&gt;
&lt;/RelativeLayout&gt;</pre>
TitleFragment<div class="dp-highlighter bg_java"><div class="bar"><div class="tools">**[java]** [view plain](# "view plain")<span> [copy](# "copy")</span><div></div><span> [print](# "print")</span>[?](# "?")</div></div>
1. <span><span class="keyword">package</span><span>&nbsp;com.zhy.zhy_fragments;&nbsp;&nbsp;</span></span>
2. <span>&nbsp;&nbsp;</span>
3. <span><span class="keyword">import</span><span>&nbsp;android.app.Fragment;&nbsp;&nbsp;</span></span>
4. <span><span class="keyword">import</span><span>&nbsp;android.os.Bundle;&nbsp;&nbsp;</span></span>
5. <span><span class="keyword">import</span><span>&nbsp;android.view.LayoutInflater;&nbsp;&nbsp;</span></span>
6. <span><span class="keyword">import</span><span>&nbsp;android.view.View;&nbsp;&nbsp;</span></span>
7. <span><span class="keyword">import</span><span>&nbsp;android.view.View.OnClickListener;&nbsp;&nbsp;</span></span>
8. <span><span class="keyword">import</span><span>&nbsp;android.view.ViewGroup;&nbsp;&nbsp;</span></span>
9. <span><span class="keyword">import</span><span>&nbsp;android.widget.ImageButton;&nbsp;&nbsp;</span></span>
10. <span><span class="keyword">import</span><span>&nbsp;android.widget.Toast;&nbsp;&nbsp;</span></span>
11. <span>&nbsp;&nbsp;</span>
12. <span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;TitleFragment&nbsp;</span><span class="keyword">extends</span><span>&nbsp;Fragment&nbsp;&nbsp;</span></span>
13. <span>{&nbsp;&nbsp;</span>
14. <span>&nbsp;&nbsp;</span>
15. <span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">private</span><span>&nbsp;ImageButton&nbsp;mLeftMenu;&nbsp;&nbsp;</span></span>
16. <span>&nbsp;&nbsp;</span>
17. <span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="annotation">@Override</span><span>&nbsp;&nbsp;</span></span>
18. <span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;View&nbsp;onCreateView(LayoutInflater&nbsp;inflater,&nbsp;ViewGroup&nbsp;container,&nbsp;&nbsp;</span></span>
19. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Bundle&nbsp;savedInstanceState)&nbsp;&nbsp;</span>
20. <span>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;</span>
21. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;View&nbsp;view&nbsp;=&nbsp;inflater.inflate(R.layout.fragment_title,&nbsp;container,&nbsp;<span class="keyword">false</span><span>);&nbsp;&nbsp;</span></span>
22. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mLeftMenu&nbsp;=&nbsp;(ImageButton)&nbsp;view.findViewById(R.id.id_title_left_btn);&nbsp;&nbsp;</span>
23. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mLeftMenu.setOnClickListener(<span class="keyword">new</span><span>&nbsp;OnClickListener()&nbsp;&nbsp;</span></span>
24. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;</span>
25. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="annotation">@Override</span><span>&nbsp;&nbsp;</span></span>
26. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;onClick(View&nbsp;v)&nbsp;&nbsp;</span></span>
27. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;</span>
28. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Toast.makeText(getActivity(),&nbsp;&nbsp;</span>
29. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="string">”i&nbsp;am&nbsp;an&nbsp;ImageButton&nbsp;in&nbsp;TitleFragment&nbsp;!&nbsp;”</span><span>,&nbsp;&nbsp;</span></span>
30. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Toast.LENGTH_SHORT).show();&nbsp;&nbsp;</span>
31. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span>
32. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});&nbsp;&nbsp;</span>
33. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;view;&nbsp;&nbsp;</span></span>
34. <span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span>
35. <span>}&nbsp;&nbsp;</span><div class="save_code tracking-ad"><a>![](http://static.blog.csdn.net/images/save_snippets.png)</a></div></div><pre class="java">package com.zhy.zhy_fragments;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ImageButton;
import android.widget.Toast;
public class TitleFragment extends Fragment
{
private ImageButton mLeftMenu;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
View view = inflater.inflate(R.layout.fragment_title, container, false);
mLeftMenu = (ImageButton) view.findViewById(R.id.id_title_left_btn);
mLeftMenu.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
Toast.makeText(getActivity(),
"i am an ImageButton in TitleFragment ! ",
Toast.LENGTH_SHORT).show();
}
});
return view;
}
}
</pre>
同理还有ContentFragment的其布局文件:<div class="dp-highlighter bg_html"><div class="bar"><div class="tools">**[html]** [view plain](# "view plain")<span> [copy](# "copy")</span><div></div><span> [print](# "print")</span>[?](# "?")</div></div>
1. <span><span class="tag">&lt;?</span><span class="tag-name">xml</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">“1.0”</span><span>&nbsp;</span><span class="attribute">encoding</span><span>=</span><span class="attribute-value">“utf-8”</span><span class="tag">?&gt;</span><span>&nbsp;&nbsp;</span></span>
2. <span><span class="tag">&lt;</span><span class="tag-name">LinearLayout</span><span>&nbsp;</span><span class="attribute">xmlns:android</span><span>=</span><span class="attribute-value">“http://schemas.android.com/apk/res/android”</span><span>&nbsp;&nbsp;</span></span>
3. <span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">android:layout_width</span><span>=</span><span class="attribute-value">“match_parent”</span><span>&nbsp;&nbsp;</span></span>
4. <span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">android:layout_height</span><span>=</span><span class="attribute-value">“match_parent”</span><span>&nbsp;&nbsp;</span></span>
5. <span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">android:orientation</span><span>=</span><span class="attribute-value">“vertical”</span><span>&nbsp;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
6. <span>&nbsp;&nbsp;</span>
7. <span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">TextView</span><span>&nbsp;&nbsp;</span></span>
8. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">android:layout_width</span><span>=</span><span class="attribute-value">“fill_parent”</span><span>&nbsp;&nbsp;</span></span>
9. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">android:layout_height</span><span>=</span><span class="attribute-value">“fill_parent”</span><span>&nbsp;&nbsp;</span></span>
10. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">android:gravity</span><span>=</span><span class="attribute-value">“center”</span><span>&nbsp;&nbsp;</span></span>
11. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">android:text</span><span>=</span><span class="attribute-value">“使用Fragment做主面板”</span><span>&nbsp;&nbsp;</span></span>
12. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">android:textSize</span><span>=</span><span class="attribute-value">“20sp”</span><span>&nbsp;&nbsp;</span></span>
13. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">android:textStyle</span><span>=</span><span class="attribute-value">“bold”</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span>
14. <span>&nbsp;&nbsp;</span>
15. <span><span class="tag">&lt;/</span><span class="tag-name">LinearLayout</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span><div class="save_code tracking-ad"><a>![](http://static.blog.csdn.net/images/save_snippets.png)</a></div></div><pre class="html">&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" &gt;
&lt;TextView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:text="使用Fragment做主面板"
android:textSize="20sp"
android:textStyle="bold" /&gt;
&lt;/LinearLayout&gt;</pre>
<div class="dp-highlighter bg_java"><div class="bar"><div class="tools">**[java]** [view plain](# "view plain")<span> [copy](# "copy")</span><div></div><span> [print](# "print")</span>[?](# "?")</div></div>
1. <span><span class="keyword">package</span><span>&nbsp;com.zhy.zhy_fragments;&nbsp;&nbsp;</span></span>
2. <span>&nbsp;&nbsp;</span>
3. <span><span class="keyword">import</span><span>&nbsp;android.app.Fragment;&nbsp;&nbsp;</span></span>
4. <span><span class="keyword">import</span><span>&nbsp;android.os.Bundle;&nbsp;&nbsp;</span></span>
5. <span><span class="keyword">import</span><span>&nbsp;android.view.LayoutInflater;&nbsp;&nbsp;</span></span>
6. <span><span class="keyword">import</span><span>&nbsp;android.view.View;&nbsp;&nbsp;</span></span>
7. <span><span class="keyword">import</span><span>&nbsp;android.view.ViewGroup;&nbsp;&nbsp;</span></span>
8. <span>&nbsp;&nbsp;</span>
9. <span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;ContentFragment&nbsp;</span><span class="keyword">extends</span><span>&nbsp;Fragment&nbsp;&nbsp;</span></span>
10. <span>{&nbsp;&nbsp;</span>
11. <span>&nbsp;&nbsp;</span>
12. <span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="annotation">@Override</span><span>&nbsp;&nbsp;</span></span>
13. <span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;View&nbsp;onCreateView(LayoutInflater&nbsp;inflater,&nbsp;ViewGroup&nbsp;container,&nbsp;&nbsp;</span></span>
14. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Bundle&nbsp;savedInstanceState)&nbsp;&nbsp;</span>
15. <span>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;</span>
16. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;inflater.inflate(R.layout.fragment_content,&nbsp;container,&nbsp;</span><span class="keyword">false</span><span>);&nbsp;&nbsp;</span></span>
17. <span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span>
18. <span>&nbsp;&nbsp;</span>
19. <span>}&nbsp;&nbsp;</span><div class="save_code tracking-ad"><a>![](http://static.blog.csdn.net/images/save_snippets.png)</a></div></div><pre class="java">package com.zhy.zhy_fragments;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class ContentFragment extends Fragment
{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
return inflater.inflate(R.layout.fragment_content, container, false);
}
}
</pre>
MainActivity<div class="dp-highlighter bg_java"><div class="bar"><div class="tools">**[java]** [view plain](# "view plain")<span> [copy](# "copy")</span><div></div><span> [print](# "print")</span>[?](# "?")</div></div>
1. <span><span class="keyword">package</span><span>&nbsp;com.zhy.zhy_fragments;&nbsp;&nbsp;</span></span>
2. <span>&nbsp;&nbsp;</span>
3. <span><span class="keyword">import</span><span>&nbsp;android.app.Activity;&nbsp;&nbsp;</span></span>
4. <span><span class="keyword">import</span><span>&nbsp;android.os.Bundle;&nbsp;&nbsp;</span></span>
5. <span><span class="keyword">import</span><span>&nbsp;android.view.Window;&nbsp;&nbsp;</span></span>
6. <span>&nbsp;&nbsp;</span>
7. <span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;MainActivity&nbsp;</span><span class="keyword">extends</span><span>&nbsp;Activity&nbsp;&nbsp;</span></span>
8. <span>{&nbsp;&nbsp;</span>
9. <span>&nbsp;&nbsp;</span>
10. <span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="annotation">@Override</span><span>&nbsp;&nbsp;</span></span>
11. <span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">protected</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;onCreate(Bundle&nbsp;savedInstanceState)&nbsp;&nbsp;</span></span>
12. <span>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;</span>
13. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">super</span><span>.onCreate(savedInstanceState);&nbsp;&nbsp;</span></span>
14. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;requestWindowFeature(Window.FEATURE_NO_TITLE);&nbsp;&nbsp;</span>
15. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setContentView(R.layout.activity_main);&nbsp;&nbsp;</span>
16. <span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span>
17. <span>&nbsp;&nbsp;</span>
18. <span>}&nbsp;&nbsp;</span><div class="save_code tracking-ad"><a>![](http://static.blog.csdn.net/images/save_snippets.png)</a></div></div><pre class="java">package com.zhy.zhy_fragments;
import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
public class MainActivity extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
}
}
</pre>
Activity的布局文件:<div class="dp-highlighter bg_java"><div class="bar"><div class="tools">**[java]** [view plain](# "view plain")<span> [copy](# "copy")</span><div></div><span> [print](# "print")</span>[?](# "?")</div></div>
1. <span><span>&lt;RelativeLayout&nbsp;xmlns:android=</span><span class="string">“http://schemas.android.com/apk/res/android”</span><span>&nbsp;&nbsp;</span></span>
2. <span>&nbsp;&nbsp;&nbsp;&nbsp;xmlns:tools=<span class="string">”http://schemas.android.com/tools”</span><span>&nbsp;&nbsp;</span></span>
3. <span>&nbsp;&nbsp;&nbsp;&nbsp;android:layout_width=<span class="string">”match_parent”</span><span>&nbsp;&nbsp;</span></span>
4. <span>&nbsp;&nbsp;&nbsp;&nbsp;android:layout_height=<span class="string">”match_parent”</span><span>&nbsp;&gt;&nbsp;&nbsp;</span></span>
5. <span>&nbsp;&nbsp;</span>
6. <span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;fragment&nbsp;&nbsp;</span>
7. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:id=<span class="string">”@+id/id_fragment_title”</span><span>&nbsp;&nbsp;</span></span>
8. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:name=<span class="string">”com.zhy.zhy_fragments.TitleFragment”</span><span>&nbsp;&nbsp;</span></span>
9. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:layout_width=<span class="string">”fill_parent”</span><span>&nbsp;&nbsp;</span></span>
10. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:layout_height=<span class="string">”45dp”</span><span>&nbsp;/&gt;&nbsp;&nbsp;</span></span>
11. <span>&nbsp;&nbsp;</span>
12. <span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;fragment&nbsp;&nbsp;</span>
13. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:layout_below=<span class="string">”@id/id_fragment_title”</span><span>&nbsp;&nbsp;</span></span>
14. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:id=<span class="string">”@+id/id_fragment_content”</span><span>&nbsp;&nbsp;</span></span>
15. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:name=<span class="string">”com.zhy.zhy_fragments.ContentFragment”</span><span>&nbsp;&nbsp;</span></span>
16. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:layout_width=<span class="string">”fill_parent”</span><span>&nbsp;&nbsp;</span></span>
17. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:layout_height=<span class="string">”fill_parent”</span><span>&nbsp;/&gt;&nbsp;&nbsp;</span></span>
18. <span>&nbsp;&nbsp;</span>
19. <span>&lt;/RelativeLayout&gt;&nbsp;&nbsp;</span><div class="save_code tracking-ad"><a>![](http://static.blog.csdn.net/images/save_snippets.png)</a></div></div><pre class="java">&lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" &gt;
&lt;fragment
android:id="@+id/id_fragment_title"
android:name="com.zhy.zhy_fragments.TitleFragment"
android:layout_width="fill_parent"
android:layout_height="45dp" /&gt;
&lt;fragment
android:layout_below="@id/id_fragment_title"
android:id="@+id/id_fragment_content"
android:name="com.zhy.zhy_fragments.ContentFragment"
android:layout_width="fill_parent"
android:layout_height="fill_parent" /&gt;
&lt;/RelativeLayout&gt;</pre>
是不是把Fragment当成普通的View一样声明在Activity的布局文件中,然后所有控件的事件处理等代码都由各自的Fragment去处理,瞬间觉得Activity好干净有木有~~代码的可读性、复用性以及可维护性是不是瞬间提升了~~~下面看下效果图:
![](http://img.blog.csdn.net/20140719230904593)
## ## ## <a></a><span>4、动态的使用Fragment</span>
上面已经演示了,最简单的使用Fragment的方式~下面介绍如何动态的添加、更新、以及删除Fragment
为了动态使用Fragment,我们修改一下Actvity的布局文件,中间使用一个FrameLayout,下面添加四个按钮~~~嘿嘿~~不是微信的按钮- -!
<div class="dp-highlighter bg_html"><div class="bar"><div class="tools">**[html]** [view plain](# "view plain")<span> [copy](# "copy")</span><div></div><span> [print](# "print")</span>[?](# "?")</div></div>
1. <span><span class="tag">&lt;</span><span class="tag-name">RelativeLayout</span><span>&nbsp;</span><span class="attribute">xmlns:android</span><span>=</span><span class="attribute-value">“http://schemas.android.com/apk/res/android”</span><span>&nbsp;&nbsp;</span></span>
2. <span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">xmlns:tools</span><span>=</span><span class="attribute-value">“http://schemas.android.com/tools”</span><span>&nbsp;&nbsp;</span></span>
3. <span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">android:layout_width</span><span>=</span><span class="attribute-value">“match_parent”</span><span>&nbsp;&nbsp;</span></span>
4. <span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">android:layout_height</span><span>=</span><span class="attribute-value">“match_parent”</span><span>&nbsp;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
5. <span>&nbsp;&nbsp;</span>
6. <span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">fragment</span><span>&nbsp;&nbsp;</span></span>
7. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">android:id</span><span>=</span><span class="attribute-value">“@+id/id_fragment_title”</span><span>&nbsp;&nbsp;</span></span>
8. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">android:name</span><span>=</span><span class="attribute-value">“com.zhy.zhy_fragments.TitleFragment”</span><span>&nbsp;&nbsp;</span></span>
9. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">android:layout_width</span><span>=</span><span class="attribute-value">“fill_parent”</span><span>&nbsp;&nbsp;</span></span>
10. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">android:layout_height</span><span>=</span><span class="attribute-value">“45dp”</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span>
11. <span>&nbsp;&nbsp;</span>
12. <span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">include</span><span>&nbsp;&nbsp;</span></span>
13. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">android:id</span><span>=</span><span class="attribute-value">“@+id/id_ly_bottombar”</span><span>&nbsp;&nbsp;</span></span>
14. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">android:layout_width</span><span>=</span><span class="attribute-value">“fill_parent”</span><span>&nbsp;&nbsp;</span></span>
15. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">android:layout_height</span><span>=</span><span class="attribute-value">“55dp”</span><span>&nbsp;&nbsp;</span></span>
16. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">android:layout_alignParentBottom</span><span>=</span><span class="attribute-value">“true”</span><span>&nbsp;&nbsp;</span></span>
17. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">layout</span><span>=</span><span class="attribute-value">“@layout/bottombar”</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span>
18. <span>&nbsp;&nbsp;</span>
19. <span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">FrameLayout</span><span>&nbsp;&nbsp;</span></span>
20. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">android:id</span><span>=</span><span class="attribute-value">“@+id/id_content”</span><span>&nbsp;&nbsp;</span></span>
21. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">android:layout_width</span><span>=</span><span class="attribute-value">“fill_parent”</span><span>&nbsp;&nbsp;</span></span>
22. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">android:layout_height</span><span>=</span><span class="attribute-value">“fill_parent”</span><span>&nbsp;&nbsp;</span></span>
23. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">android:layout_above</span><span>=</span><span class="attribute-value">“@id/id_ly_bottombar”</span><span>&nbsp;&nbsp;</span></span>
24. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">android:layout_below</span><span>=</span><span class="attribute-value">“@id/id_fragment_title”</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span>
25. <span>&nbsp;&nbsp;</span>
26. <span><span class="tag">&lt;/</span><span class="tag-name">RelativeLayout</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span><div class="save_code tracking-ad"><a>![](http://static.blog.csdn.net/images/save_snippets.png)</a></div></div><pre class="html">&lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" &gt;
&lt;fragment
android:id="@+id/id_fragment_title"
android:name="com.zhy.zhy_fragments.TitleFragment"
android:layout_width="fill_parent"
android:layout_height="45dp" /&gt;
&lt;include
android:id="@+id/id_ly_bottombar"
android:layout_width="fill_parent"
android:layout_height="55dp"
android:layout_alignParentBottom="true"
layout="@layout/bottombar" /&gt;
&lt;FrameLayout
android:id="@+id/id_content"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_above="@id/id_ly_bottombar"
android:layout_below="@id/id_fragment_title" /&gt;
&lt;/RelativeLayout&gt;</pre>
底部四个按钮的布局就不贴了,到时看效果图就明白了~~
下面主Activity
<div class="dp-highlighter bg_java"><div class="bar"><div class="tools">**[java]** [view plain](# "view plain")<span> [copy](# "copy")</span><div></div><span> [print](# "print")</span>[?](# "?")</div></div>
1. <span><span class="keyword">package</span><span>&nbsp;com.zhy.zhy_fragments;&nbsp;&nbsp;</span></span>
2. <span>&nbsp;&nbsp;</span>
3. <span><span class="keyword">import</span><span>&nbsp;android.app.Activity;&nbsp;&nbsp;</span></span>
4. <span><span class="keyword">import</span><span>&nbsp;android.app.FragmentManager;&nbsp;&nbsp;</span></span>
5. <span><span class="keyword">import</span><span>&nbsp;android.app.FragmentTransaction;&nbsp;&nbsp;</span></span>
6. <span><span class="keyword">import</span><span>&nbsp;android.os.Bundle;&nbsp;&nbsp;</span></span>
7. <span><span class="keyword">import</span><span>&nbsp;android.view.View;&nbsp;&nbsp;</span></span>
8. <span><span class="keyword">import</span><span>&nbsp;android.view.View.OnClickListener;&nbsp;&nbsp;</span></span>
9. <span><span class="keyword">import</span><span>&nbsp;android.view.Window;&nbsp;&nbsp;</span></span>
10. <span><span class="keyword">import</span><span>&nbsp;android.widget.LinearLayout;&nbsp;&nbsp;</span></span>
11. <span>&nbsp;&nbsp;</span>
12. <span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;MainActivity&nbsp;</span><span class="keyword">extends</span><span>&nbsp;Activity&nbsp;</span><span class="keyword">implements</span><span>&nbsp;OnClickListener&nbsp;&nbsp;</span></span>
13. <span>{&nbsp;&nbsp;</span>
14. <span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">private</span><span>&nbsp;LinearLayout&nbsp;mTabWeixin;&nbsp;&nbsp;</span></span>
15. <span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">private</span><span>&nbsp;LinearLayout&nbsp;mTabFriend;&nbsp;&nbsp;</span></span>
16. <span>&nbsp;&nbsp;</span>
17. <span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">private</span><span>&nbsp;ContentFragment&nbsp;mWeixin;&nbsp;&nbsp;</span></span>
18. <span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">private</span><span>&nbsp;FriendFragment&nbsp;mFriend;&nbsp;&nbsp;</span></span>
19. <span>&nbsp;&nbsp;</span>
20. <span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="annotation">@Override</span><span>&nbsp;&nbsp;</span></span>
21. <span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">protected</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;onCreate(Bundle&nbsp;savedInstanceState)&nbsp;&nbsp;</span></span>
22. <span>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;</span>
23. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">super</span><span>.onCreate(savedInstanceState);&nbsp;&nbsp;</span></span>
24. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;requestWindowFeature(Window.FEATURE_NO_TITLE);&nbsp;&nbsp;</span>
25. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setContentView(R.layout.activity_main);&nbsp;&nbsp;</span>
26. <span>&nbsp;&nbsp;</span>
27. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;初始化控件和声明事件</span><span>&nbsp;&nbsp;</span></span>
28. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mTabWeixin&nbsp;=&nbsp;(LinearLayout)&nbsp;findViewById(R.id.tab_bottom_weixin);&nbsp;&nbsp;</span>
29. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mTabFriend&nbsp;=&nbsp;(LinearLayout)&nbsp;findViewById(R.id.tab_bottom_friend);&nbsp;&nbsp;</span>
30. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mTabWeixin.setOnClickListener(<span class="keyword">this</span><span>);&nbsp;&nbsp;</span></span>
31. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mTabFriend.setOnClickListener(<span class="keyword">this</span><span>);&nbsp;&nbsp;</span></span>
32. <span>&nbsp;&nbsp;</span>
33. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;设置默认的Fragment</span><span>&nbsp;&nbsp;</span></span>
34. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setDefaultFragment();&nbsp;&nbsp;</span>
35. <span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span>
36. <span>&nbsp;&nbsp;</span>
37. <span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">private</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setDefaultFragment()&nbsp;&nbsp;</span></span>
38. <span>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;</span>
39. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FragmentManager&nbsp;fm&nbsp;=&nbsp;getFragmentManager();&nbsp;&nbsp;</span>
40. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FragmentTransaction&nbsp;transaction&nbsp;=&nbsp;fm.beginTransaction();&nbsp;&nbsp;</span>
41. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mWeixin&nbsp;=&nbsp;<span class="keyword">new</span><span>&nbsp;ContentFragment();&nbsp;&nbsp;</span></span>
42. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;transaction.replace(R.id.id_content,&nbsp;mWeixin);&nbsp;&nbsp;</span>
43. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;transaction.commit();&nbsp;&nbsp;</span>
44. <span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span>
45. <span>&nbsp;&nbsp;</span>
46. <span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="annotation">@Override</span><span>&nbsp;&nbsp;</span></span>
47. <span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;onClick(View&nbsp;v)&nbsp;&nbsp;</span></span>
48. <span>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;</span>
49. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FragmentManager&nbsp;fm&nbsp;=&nbsp;getFragmentManager();&nbsp;&nbsp;</span>
50. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;开启Fragment事务</span><span>&nbsp;&nbsp;</span></span>
51. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FragmentTransaction&nbsp;transaction&nbsp;=&nbsp;fm.beginTransaction();&nbsp;&nbsp;</span>
52. <span>&nbsp;&nbsp;</span>
53. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">switch</span><span>&nbsp;(v.getId())&nbsp;&nbsp;</span></span>
54. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;</span>
55. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">case</span><span>&nbsp;R.id.tab_bottom_weixin:&nbsp;&nbsp;</span></span>
56. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>&nbsp;(mWeixin&nbsp;==&nbsp;</span><span class="keyword">null</span><span>)&nbsp;&nbsp;</span></span>
57. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;</span>
58. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mWeixin&nbsp;=&nbsp;<span class="keyword">new</span><span>&nbsp;ContentFragment();&nbsp;&nbsp;</span></span>
59. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span>
60. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;使用当前Fragment的布局替代id_content的控件</span><span>&nbsp;&nbsp;</span></span>
61. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;transaction.replace(R.id.id_content,&nbsp;mWeixin);&nbsp;&nbsp;</span>
62. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">break</span><span>;&nbsp;&nbsp;</span></span>
63. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">case</span><span>&nbsp;R.id.tab_bottom_friend:&nbsp;&nbsp;</span></span>
64. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>&nbsp;(mFriend&nbsp;==&nbsp;</span><span class="keyword">null</span><span>)&nbsp;&nbsp;</span></span>
65. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;</span>
66. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mFriend&nbsp;=&nbsp;<span class="keyword">new</span><span>&nbsp;FriendFragment();&nbsp;&nbsp;</span></span>
67. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span>
68. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;transaction.replace(R.id.id_content,&nbsp;mFriend);&nbsp;&nbsp;</span>
69. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">break</span><span>;&nbsp;&nbsp;</span></span>
70. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span>
71. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;transaction.addToBackStack();</span><span>&nbsp;&nbsp;</span></span>
72. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;事务提交</span><span>&nbsp;&nbsp;</span></span>
73. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;transaction.commit();&nbsp;&nbsp;</span>
74. <span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span>
75. <span>&nbsp;&nbsp;</span>
76. <span>}&nbsp;&nbsp;</span><div class="save_code tracking-ad"><a>![](http://static.blog.csdn.net/images/save_snippets.png)</a></div></div><pre class="java">package com.zhy.zhy_fragments;
import android.app.Activity;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.LinearLayout;
public class MainActivity extends Activity implements OnClickListener
{
private LinearLayout mTabWeixin;
private LinearLayout mTabFriend;
private ContentFragment mWeixin;
private FriendFragment mFriend;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
// 初始化控件和声明事件
mTabWeixin = (LinearLayout) findViewById(R.id.tab_bottom_weixin);
mTabFriend = (LinearLayout) findViewById(R.id.tab_bottom_friend);
mTabWeixin.setOnClickListener(this);
mTabFriend.setOnClickListener(this);
// 设置默认的Fragment
setDefaultFragment();
}
private void setDefaultFragment()
{
FragmentManager fm = getFragmentManager();
FragmentTransaction transaction = fm.beginTransaction();
mWeixin = new ContentFragment();
transaction.replace(R.id.id_content, mWeixin);
transaction.commit();
}
@Override
public void onClick(View v)
{
FragmentManager fm = getFragmentManager();
// 开启Fragment事务
FragmentTransaction transaction = fm.beginTransaction();
switch (v.getId())
{
case R.id.tab_bottom_weixin:
if (mWeixin == null)
{
mWeixin = new ContentFragment();
}
// 使用当前Fragment的布局替代id_content的控件
transaction.replace(R.id.id_content, mWeixin);
break;
case R.id.tab_bottom_friend:
if (mFriend == null)
{
mFriend = new FriendFragment();
}
transaction.replace(R.id.id_content, mFriend);
break;
}
// transaction.addToBackStack();
// 事务提交
transaction.commit();
}
}
</pre>
可以看到我们使用FragmentManager对Fragment进行了动态的加载,这里使用的是replace方法~~下一节我会详细介绍FragmentManager的常用API。
注:如果使用Android3.0以下的版本,需要引入v4的包,然后Activity继承FragmentActivity,然后通过getSupportFragmentManager获得FragmentManager。不过还是建议版Menifest文件的uses-sdk的minSdkVersion和targetSdkVersion都改为11以上,这样就不必引入v4包了。
代码中间还有两个Fragment的子类,ContentFragment上面已经见过,FriendFragment其实类似:
<div class="dp-highlighter bg_java"><div class="bar"><div class="tools">**[java]** [view plain](# "view plain")<span> [copy](# "copy")</span><div></div><span> [print](# "print")</span>[?](# "?")</div></div>
1. <span><span class="keyword">package</span><span>&nbsp;com.zhy.zhy_fragments;&nbsp;&nbsp;</span></span>
2. <span>&nbsp;&nbsp;</span>
3. <span><span class="keyword">import</span><span>&nbsp;android.app.Fragment;&nbsp;&nbsp;</span></span>
4. <span><span class="keyword">import</span><span>&nbsp;android.os.Bundle;&nbsp;&nbsp;</span></span>
5. <span><span class="keyword">import</span><span>&nbsp;android.view.LayoutInflater;&nbsp;&nbsp;</span></span>
6. <span><span class="keyword">import</span><span>&nbsp;android.view.View;&nbsp;&nbsp;</span></span>
7. <span><span class="keyword">import</span><span>&nbsp;android.view.ViewGroup;&nbsp;&nbsp;</span></span>
8. <span>&nbsp;&nbsp;</span>
9. <span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;FriendFragment&nbsp;</span><span class="keyword">extends</span><span>&nbsp;Fragment&nbsp;&nbsp;</span></span>
10. <span>{&nbsp;&nbsp;</span>
11. <span>&nbsp;&nbsp;</span>
12. <span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="annotation">@Override</span><span>&nbsp;&nbsp;</span></span>
13. <span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;View&nbsp;onCreateView(LayoutInflater&nbsp;inflater,&nbsp;ViewGroup&nbsp;container,&nbsp;&nbsp;</span></span>
14. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Bundle&nbsp;savedInstanceState)&nbsp;&nbsp;</span>
15. <span>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;</span>
16. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;inflater.inflate(R.layout.fragment_friend,&nbsp;container,&nbsp;</span><span class="keyword">false</span><span>);&nbsp;&nbsp;</span></span>
17. <span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span>
18. <span>&nbsp;&nbsp;</span>
19. <span>}&nbsp;&nbsp;</span><div class="save_code tracking-ad"><a>![](http://static.blog.csdn.net/images/save_snippets.png)</a></div></div><pre class="java">package com.zhy.zhy_fragments;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class FriendFragment extends Fragment
{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
return inflater.inflate(R.layout.fragment_friend, container, false);
}
}
</pre>
效果图:
![](http://img.blog.csdn.net/20140720002532641)
可以看到很好的实现了效果,其实这个效果以前的博客中也出现过,在博客:[Android项目Tab类型主界面大总结 Fragment+TabPageIndicator+ViewPager](http://blog.csdn.net/lmj623565791/article/details/24740977),有兴趣可以看看。ps:为了代码的简洁,就不添加按钮的点击变化什么的了,主要讲解功能了


## ## ## 5、Fragment家族常用的API

Fragment常用的三个类:

android.app.Fragment 主要用于定义Fragment

android.app.FragmentManager 主要用于在Activity中操作Fragment

android.app.FragmentTransaction 保证一些列Fragment操作的原子性,熟悉事务这个词,一定能明白~

a、获取FragmentManage的方式:

getFragmentManager() // v4中,getSupportFragmentManager

b、主要的操作都是FragmentTransaction的方法

FragmentTransaction transaction = fm.benginTransatcion();//开启一个事务

transaction.add() 

往Activity中添加一个Fragment

transaction.remove()

从Activity中移除一个Fragment,如果被移除的Fragment没有添加到回退栈(回退栈后面会详细说),这个Fragment实例将会被销毁。

transaction.replace()

使用另一个Fragment替换当前的,实际上就是remove()然后add()的合体~

transaction.hide()

隐藏当前的Fragment,仅仅是设为不可见,并不会销毁

transaction.show()

显示之前隐藏的Fragment

detach()

会将view从UI中移除,和remove()不同,此时fragment的状态依然由FragmentManager维护。

attach()

重建view视图,附加到UI上并显示。

transatcion.commit()//提交一个事务

注意:常用Fragment的哥们,可能会经常遇到这样Activity状态不一致:State loss这样的错误。主要是因为:commit方法一定要在Activity.onSaveInstance()之前调用。

上述,基本是操作Fragment的所有的方式了,在一个事务开启到提交可以进行多个的添加、移除、替换等操作。

值得注意的是:如果你喜欢使用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。

上述已经介绍完成了Fragment常用的一些方法,相信看完,大家一定清楚了Fragment的产生理由,以及如何使用Fragment,再根据API的讲解,也能明白,曾经为何觉得Fragment会出现一些列乱七八槽的问题,终究是因为没有弄清楚其生命周期。

由于篇幅原因,剩下的内容留到下一篇了。在下一篇,会介绍:

1、如何管理Fragment回退栈

2、Fragment如何与Activity交互

3、Fragment与Activity交互的最佳实践

4、没有视图的Fragment的用处

5、使用Fragment创建对话框

6、如何与ActionBar,MenuItem集成等~~

下一篇:Android Fragment 真正的完全解析(下)

好了,有任何问题请留言~~

会将view从UI中移除,和remove()不同,此时fragment的状态依然由FragmentManager维护。



## #









<div>
    作者:qq_23974175 发表于2016/9/12 12:21:06 [原文链接](http://blog.csdn.net/qq_23974175/article/details/52512409)
</div>
<div>
阅读:6 评论:0 [查看评论](http://blog.csdn.net/qq_23974175/article/details/52512409# comments)
</div>