zoukankan      html  css  js  c++  java
  • "ScrollView can host only one direct child"问题解决了

    1. 问题叙述性说明:

    (请注意以下几点大胆)。

    ScrollView作为顶层view时报错,直接导致apk崩溃。具体错误信息例如以下:

    12-21 09:12:15.150: D/AndroidRuntime(7726): Shutting down VM
    12-21 09:12:15.150: W/dalvikvm(7726): threadid=1: thread exiting with uncaught exception (group=0x416402a0)
    12-21 09:12:15.160: E/AndroidRuntime(7726): FATAL EXCEPTION: main
    12-21 09:12:15.160: E/AndroidRuntime(7726): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.project.fish.app/com.my.act.activity.my.MyFA}: java.lang.IllegalStateException: ScrollView can host only one direct child
    12-21 09:12:15.160: E/AndroidRuntime(7726):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2110)
    12-21 09:12:15.160: E/AndroidRuntime(7726):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135)
    12-21 09:12:15.160: E/AndroidRuntime(7726):  at android.app.ActivityThread.access$700(ActivityThread.java:140)
    12-21 09:12:15.160: E/AndroidRuntime(7726):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1237)
    12-21 09:12:15.160: E/AndroidRuntime(7726):  at android.os.Handler.dispatchMessage(Handler.java:99)
    12-21 09:12:15.160: E/AndroidRuntime(7726):  at android.os.Looper.loop(Looper.java:137)
    12-21 09:12:15.160: E/AndroidRuntime(7726):  at android.app.ActivityThread.main(ActivityThread.java:4921)
    12-21 09:12:15.160: E/AndroidRuntime(7726):  at java.lang.reflect.Method.invokeNative(Native Method)
    12-21 09:12:15.160: E/AndroidRuntime(7726):  at java.lang.reflect.Method.invoke(Method.java:511)
    12-21 09:12:15.160: E/AndroidRuntime(7726):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
    12-21 09:12:15.160: E/AndroidRuntime(7726):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
    12-21 09:12:15.160: E/AndroidRuntime(7726):  at dalvik.system.NativeStart.main(Native Method)
    12-21 09:12:15.160: E/AndroidRuntime(7726): Caused by: java.lang.IllegalStateException: ScrollView can host only one direct child
    12-21 09:12:15.160: E/AndroidRuntime(7726):  at android.widget.ScrollView.addView(ScrollView.java:316)
    12-21 09:12:15.160: E/AndroidRuntime(7726):  at android.view.LayoutInflater.rInflate(LayoutInflater.java:750)
    12-21 09:12:15.160: E/AndroidRuntime(7726):  at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
    12-21 09:12:15.160: E/AndroidRuntime(7726):  at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
    12-21 09:12:15.160: E/AndroidRuntime(7726):  at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
    12-21 09:12:15.160: E/AndroidRuntime(7726):  at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:307)
    12-21 09:12:15.160: E/AndroidRuntime(7726):  at android.app.Activity.setContentView(Activity.java:1924)
    12-21 09:12:15.160: E/AndroidRuntime(7726):  at com.my.act.InitTitlebar(MyFA.java:113)
    12-21 09:12:15.160: E/AndroidRuntime(7726):  at com.ui.activity.base.BaseFA.onCreate(BaseFA.java:29)
    12-21 09:12:15.160: E/AndroidRuntime(7726):  at com.fish.ui.activity.my.MyFA.onCreate(MyFA.java:169)
    12-21 09:12:15.160: E/AndroidRuntime(7726):  at android.app.Activity.performCreate(Activity.java:5206)
    12-21 09:12:15.160: E/AndroidRuntime(7726):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
    12-21 09:12:15.160: E/AndroidRuntime(7726):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2074)
    12-21 09:12:15.160: E/AndroidRuntime(7726):  ... 11 more

    2. 分析:

    从错误信息ScrollView can host only one direct child
    可见,是xml的错误。以下列出错误的xml文件:

    <?xml version="1.0" encoding="utf-8"?

    >
    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="@color/WhiteColor"
        android:scrollbars="vertical" >

       

            <!-- =================1. image ========================= -->

            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:orientation="horizontal"
                android:paddingTop="15dip" >

                <ImageView
                    android:id="@+id/imageView_pic"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:contentDescription="text"
                    android:scaleType="fitCenter"
                    android:src="@drawable/empty_photo" />
            </LinearLayout>
           

            <!-- ========================= 2. detail ================= -->

            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="32dp"
                android:layout_marginTop="10dp"
                android:orientation="vertical" >

                <TextView
                    android:id="@+id/text_prompt"
                    android:layout_width="wrap_content"
                    android:layout_height="fill_parent"
                    android:layout_marginLeft="5dp"
                    android:gravity="center"
                    android:text="@string/text_detail"
                    android:textSize="15dip" />
            </LinearLayout>
           
            <!-- ========================= 3. line ================= -->
           
            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="32dp"
                android:layout_marginTop="4dp"
                android:orientation="vertical" >

                <TextView
                    android:layout_width="fill_parent"
                    android:layout_height="2dp"
                    android:background="@color/lightgray" />
            </LinearLayout>


    </ScrollView>

    ,这个ScrollView中包括3个LinerLayout。

    3. 解决:

    从错误信息,我们就知道,须要scrollview不能有多个child,所以,我在3个layout外,又加了一个layout。使3个layou成为这个新加的layout的子view,问题解决。

    以下是正确的xml定义:

    <?

    xml version="1.0" encoding="utf-8"?

    >
    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="@color/WhiteColor"
        android:scrollbars="vertical" >

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:paddingTop="15dip" >

            <!-- =================1. image ========================= -->

            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:orientation="horizontal"
                android:paddingTop="15dip" >

                <ImageView
                    android:id="@+id/imageView_pic"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:contentDescription="text"
                    android:scaleType="fitCenter"
                    android:src="@drawable/empty_photo" />
            </LinearLayout>
           

            <!-- ========================= 2. detail ================= -->

            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="32dp"
                android:layout_marginTop="10dp"
                android:orientation="vertical" >

                <TextView
                    android:id="@+id/text_prompt"
                    android:layout_width="wrap_content"
                    android:layout_height="fill_parent"
                    android:layout_marginLeft="5dp"
                    android:gravity="center"
                    android:text="@string/text_detail"
                    android:textSize="15dip" />
            </LinearLayout>
           
            <!-- ========================= 3. line ================= -->
           
            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="32dp"
                android:layout_marginTop="4dp"
                android:orientation="vertical" >

                <TextView
                    android:layout_width="fill_parent"
                    android:layout_height="2dp"
                    android:background="@color/lightgray" />
            </LinearLayout>
    </LinearLayout>

    </ScrollView>

    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    微信 token ticket jsapi_ticket access_token 获取 getAccessToken get_jsapi_ticket方法
    PHP 日志 记录 函数 支持 数组 对象 新浪 sae 环境 去掉 空格 换行 格式化 输出 数组转字符串
    原生 原始 PHP连接MySQL 代码 参考mysqli pdo
    PHP 数字金额转换成中文大写金额的函数 数字转中文
    使用PHPMailer发送带附件并支持HTML内容的邮件
    设置输出编码格式 header 重定向 执行时间 set_time_limit 错误 报告 级别 error_reporting
    html5 bootstrap pannel table 协议 公告 声明 文书 模板
    指向指针的指针
    二级指针
    c语言:当指针成为参数后
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/4635640.html
Copyright © 2011-2022 走看看