为什么我要获得“ scrollview”只能主持一个直接的孩子。错误?

发布于 2025-01-23 19:14:47 字数 5659 浏览 2 评论 0 原文

我会收到“ ScrollView只能主持一个直接孩子”错误。我意识到,这通常是(总是(总是?)由滚动浏览带有一个以上的孩子-Mulitple Answers 此处在这里< /a>,在这里 there and shere 在堆栈上说要将孩子包裹在线上层或类似的情况下。

但是,我确定我只有一个孩子的孩子。请参阅以下代码:

<?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:background="@color/background_medium"
    android:orientation="vertical">

    <include
        android:id="@+id/menu_header"
        layout="@layout/header" />

    <ScrollView
        android:id="@+id/menu_wrapper"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">

        <LinearLayout
            android:id="@+id/menu_content"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:orientation="vertical">


            <!-- Various LinearLayouts displaying menu items -->
            
        </LinearLayout>
    </ScrollView>
</LinearLayout>

菜单.java

// When one of the menu items is clicked
FragmentTransaction transaction = getParentFragmentManager().beginTransaction();
transaction.replace(R.id.menu_wrapper, fragment);
transaction.addToBackStack(null);
transaction.commit();

layout \ 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:background="@color/background_light"
    android:orientation="vertical">

    <include
        android:id="@+id/list_header"
        layout="@layout/header" />

    <include
        android:id="@+id/list_sort"
        layout="@layout/sort" />

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@id/inspection_list_header"
        android:layout_alignParentBottom="true">

        <ListView
            android:id="@+id/list"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_above="@+id/list_loading"
            android:divider="@color/background_medium"
            android:dividerHeight="1dp"
            android:listSelector="@drawable/default_focused"
            android:textSize="18sp">

        </ListView>

        <ProgressBar
            android:id="@+id/list_loading"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true"
            android:indeterminate="true"
            android:indeterminateOnly="true" />
    </RelativeLayout>
</LinearLayout>

fragment.java

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
  View rootView = inflater.inflate(R.layout.list, container, false);
  this.inspectionListView = rootView;
  return rootView;
}

这是堆栈跟踪:

2022-04-25 13:12:59.725 14833-14833/com.*******.*******.mobile E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.*******.*******.mobile, PID: 14833
    java.lang.IllegalStateException: ScrollView can host only one direct child
        at android.widget.ScrollView.addView(ScrollView.java:494)
        at androidx.fragment.app.FragmentStateManager.addViewToContainer(FragmentStateManager.java:833)
        at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:523)
        at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:282)
        at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:2189)
        at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:2100)
        at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:2002)
        at androidx.fragment.app.FragmentManager$5.run(FragmentManager.java:524)
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:216)
        at android.app.ActivityThread.main(ActivityThread.java:7211)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:975)

我敢肯定我缺少一些非常简单的东西,但是我无法弄清楚什么。我继承了此代码,不是Android开发人员,因此任何帮助都将不胜感激

I'm getting the "ScrollView can only host one direct child" error. I realise that this is often (always?) caused by the ScrollView having more than one child - mulitple answers here, here, here, here and here on Stack say to wrap the child in a LinearLayout or similar.

However I am sure that I only have one child of my ScrollView. Please see the below code:

layout\menu.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:background="@color/background_medium"
    android:orientation="vertical">

    <include
        android:id="@+id/menu_header"
        layout="@layout/header" />

    <ScrollView
        android:id="@+id/menu_wrapper"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">

        <LinearLayout
            android:id="@+id/menu_content"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:orientation="vertical">


            <!-- Various LinearLayouts displaying menu items -->
            
        </LinearLayout>
    </ScrollView>
</LinearLayout>

menu.java

// When one of the menu items is clicked
FragmentTransaction transaction = getParentFragmentManager().beginTransaction();
transaction.replace(R.id.menu_wrapper, fragment);
transaction.addToBackStack(null);
transaction.commit();

layout\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:background="@color/background_light"
    android:orientation="vertical">

    <include
        android:id="@+id/list_header"
        layout="@layout/header" />

    <include
        android:id="@+id/list_sort"
        layout="@layout/sort" />

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@id/inspection_list_header"
        android:layout_alignParentBottom="true">

        <ListView
            android:id="@+id/list"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_above="@+id/list_loading"
            android:divider="@color/background_medium"
            android:dividerHeight="1dp"
            android:listSelector="@drawable/default_focused"
            android:textSize="18sp">

        </ListView>

        <ProgressBar
            android:id="@+id/list_loading"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true"
            android:indeterminate="true"
            android:indeterminateOnly="true" />
    </RelativeLayout>
</LinearLayout>

fragment.java

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
  View rootView = inflater.inflate(R.layout.list, container, false);
  this.inspectionListView = rootView;
  return rootView;
}

And here is the stack trace:

2022-04-25 13:12:59.725 14833-14833/com.*******.*******.mobile E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.*******.*******.mobile, PID: 14833
    java.lang.IllegalStateException: ScrollView can host only one direct child
        at android.widget.ScrollView.addView(ScrollView.java:494)
        at androidx.fragment.app.FragmentStateManager.addViewToContainer(FragmentStateManager.java:833)
        at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:523)
        at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:282)
        at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:2189)
        at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:2100)
        at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:2002)
        at androidx.fragment.app.FragmentManager$5.run(FragmentManager.java:524)
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:216)
        at android.app.ActivityThread.main(ActivityThread.java:7211)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:975)

I'm sure I'm missing something really simple, but I can't work out what. I've inherited this code and am not an Android developer so any help would be much appreciated

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

颜漓半夏 2025-01-30 19:14:47

给出菜单>菜单的高度和宽度匹配。

<?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:background="@color/background_medium"
        android:orientation="vertical">
    
        <include
            android:id="@+id/menu_header"
            layout="@layout/header" />
    

        <!-- This view will be used as fragment container -->

        <LinearLayout
                android:id="@+id/menu_content"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical"/>

    </LinearLayout>

Give height and width match_parent to menu_content

<?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:background="@color/background_medium"
        android:orientation="vertical">
    
        <include
            android:id="@+id/menu_header"
            layout="@layout/header" />
    

        <!-- This view will be used as fragment container -->

        <LinearLayout
                android:id="@+id/menu_content"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical"/>

    </LinearLayout>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文