android开发 Fragment嵌套调用常见错误

在activity中有时需要嵌套调用fragment,但嵌套调用往往带来视图的显示与预期的不一样或是fragment的切换有问题。在使用时要注意几点:

1、fragment中嵌套fragment,子fragment视图无法显示:

如下:

父fragment的.xml文件:

<pre name="code" class="html"><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:baselineAligned="false"
    android:background="#339922"
    android:id="@+id/mainfrag">  

 <TextView
      android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:text="hahaha"
     />

</LinearLayout>  

子fragment的xml文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:baselineAligned="false"
    >
       <fragment
        android:id="@+id/fragment1"
        android:name="com.fff.test.Fragment1"
        android:layout_width="0dip"
        android:layout_height="match_parent"
        android:layout_weight="1" />  

    <fragment
        android:id="@+id/fragment2"
        android:name="com.fff.test.Fragment2"
        android:layout_width="0dip"
        android:layout_height="match_parent"
        android:layout_weight="1" />  

</LinearLayout>

此时运行的显示结果如下:

只有父的视图显示,并没有嵌套到子的视图中,分析原因是父的视图一直显示而没有被覆盖,且因为其布局:

 android:layout_width="match_parent"
    android:layout_height="match_parent"

为填充整个屏幕,所以无法显示。我们将layout_width与layout_height改为wrap_content,结果如下:

为了让子Fragment可以充满屏幕,父Fragment必须用FrameLayout的布局方式。即修改父.xml文件为:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/mainfrag"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
 />

结果为:

2、要在各个Fragment间切换,必须要有一个fragmentmanager可以管理所有的fragment,这样在进行切换时才能用fragmengmanager调用transaction对这些fragment进行操作。

比如如下结构的demo:

Mainactivity包含fragment1,fragment1又包含fragment2.这样为了让fragment1与fragmeng2切换,在Mainactivity中包含fragmengmanager fm来对1、2切换,代码如下(在Mainactivity.java中):

	public static void switchContent(Fragment from,Fragment to,String toTag){
		if(from!=to){
			FragmentTransaction transaction=fm.beginTransaction();
			transaction.setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out);
			if(!to.isAdded()){
				transaction.hide(from).add(R.id.container, to,toTag).commit();
			}else{
				transaction.hide(from).show(to).commit();
			}
		}
	}

在fragment1的.java文件中调用上述静态方法即可。这里不能在fragment1中用getChildFragmentManager对fragmeng2进行管理,因为这样会导致2作为1的子视图,在调用:

transaction.hide(fragment1).add(R.id.container, fragment2,"frag2").commit();

时由于,将fragment1隐藏,此事fragment2也跟着隐藏,屏幕将一片空白。

此文章仅供大家出现问题时,提供一个思路,并不是技术贴,望大神们勿喷

android开发 Fragment嵌套调用常见错误,布布扣,bubuko.com

时间: 2024-08-02 02:50:58

android开发 Fragment嵌套调用常见错误的相关文章

Android开发面试经——6.常见面试官提问Android题②(更新中...)

版权声明:本文为寻梦-finddreams原创文章,请关注:http://blog.csdn.net/finddreams 关注finddreams博客:http://blog.csdn.net/finddreams/article/details/44560061 1.HttpURLConnection和HttpClient他们各自的优缺点是什么? HttpUrlConnection 在 2.3 以前的版本是有 bug 的,所以之前的版本推荐使用 HttpClient,但是 google 现在

Android开发面试经——4.常见Android进阶笔试题(更新中...)

Android开发(29)  版权声明:本文为寻梦-finddreams原创文章,请关注:http://blog.csdn.net/finddreams 关注finddreams博客:http://blog.csdn.net/finddreams/article/details/44301359 上一篇文章我们已经了解了Android笔试的一些基础题目, [<Android开发面试经——2.常见Android基础笔试题> ] (http://blog.csdn.net/finddreams/a

Android开发面试经——3.常见Android进阶笔试题

关注finddreams博客:http://blog.csdn.net/finddreams/article/details/44301359 上一篇文章我们已经了解了Android笔试的一些基础题目,<Android开发面试经--2.常见Android基础笔试题> 但是做为一个有经验的开发者,仅仅知道基础题还是不够的,你的简历上说有两年以上工作经验的话,那面试官肯定会问一些深入性的问题,看你能否回答的出.所以为了找一个更好的工作,我们还需要去了解一下Android进阶的笔试题目: 1.什么是

Android开发——Fragment的简单使用总结

前言: 之前搞项目的时候,就使用了这个Fragment,中间遇到了许多坑,把坑都解决了,现在写一篇较为简单的Fragment使用总结 Fragment的简单介绍: 简单来说,Fragment其实可以理解为一个具有自己生命周期的控件,只不过这个控件又有点特殊,它有自己的处理输入事件的能力,有自己的生命周期,又必须依赖于Activity,能互相通信和托管. 使用Fragment可以精简Activity文件的代码,便于更好的阅读,同时,有着更好的速度加载 使用Fragment的另外一种情况是可以在平板

Android开发之清理系统缓存错误

最近在做清理系统缓存功能时,用到以下方法 PackageManager pm = context.getPackageManager(); Method localMethod = pm.getClass().getMethod("freeStorageAndNotify", Long.TYPE, IPackageDataObserver.class); Long localLong = Long.valueOf(getEnvironmentSize() - 1L); Object[]

记录我在百度地图开发和ArcGIS for Android开发时出现的一些错误及解决方案(后续更新)

[1]The import com.baidu.mapapi.map.Geometry conflicts with a type defined in the same file 解决:百度api包下的Geometry和某个类名相冲突,将类名换成另外的名字,不要和百度相关类里面的类名相同 [2]java.lang.ClassCastException: 解决:类型转换错误.查看Test_Geometry项目的Mainfest.xml清单文件,在<applicaiton>标签里面少了对Myap

C#程序员学习Android开发系列之调用WebService

我在学习Android开发过程中遇到的第一个疑问就是Android客户端是怎么跟服务器数据库进行交互的呢?这个问题是我当初初次接触Android时所困扰我的一个很大的问题,直到几年前的一天,我突然想到WebService是否可以呢?让WebService充当服务器端的角色,完成与服务器数据库操作相关的事情,而Android客户端只要按照WebService方法参数的要求去调用就行了.在当时我对这个解决方案的实现还没模糊,我想这个问题也是初学Android的朋友肯定会想到的问题.那么现在就让我们动

Android NDK 开发(三)--常见错误锦集合Log的使用【转】

转载请注明出处:http://blog.csdn.net/allen315410/article/details/41826511  Android NDK开发经常因某些因素会出现一些意想不到的错误,很多时候调试这些错误的时候,显得比调试Java代码要复杂,一方面是导致错误的原因很多很杂,另一方面NDK开发涉及到C/C++代码的编写,很多程序员对此不熟悉.那么这篇博客就总结一下,在NDK开发中经常出现的一些问题,并且尝试提供一些正确的解决方案,方便在开发时能够快速定位到错误,更改错误,当然了,错

实时嵌入式软件开发的25个常见错误

英文原文由David B. Stewart撰写,  这篇论文对实时嵌入式软件开发的易犯错误做了深入分析,对我们的开发非常有指导意义. David B. Stewart Software Engineering for Real-Time Systems Laboratory Department of Electrical and Computer Engineering and Institute for Advanced Computer Studies University of Mary