首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android ScrollView 僅允許一個直接子元素:動態新增 TextView 正確做法

     編輯:程式設計綜合問答

錯誤訊息

java.lang.IllegalStateException: ScrollView can host only one direct child

原因分析

XML 佈局中 ScrollView 已包裹一個 LinearLayout:

<ScrollView>
  <LinearLayout android:id="@+id/container">
    <TextView ... />
  </LinearLayout>
</ScrollView>

程式碼中又對同一 ScrollView 呼叫 sv.addView(llay),導致直接子元素變成兩個(原有 LinearLayout + 新增的 llay)。

正確做法

  1. 取得 XML 中已存在的容器:
    LinearLayout llay = (LinearLayout) findViewById(R.id.container);
  2. 直接向該容器新增子 View,**不要**再對 ScrollView 呼叫 addView:
for (String text : detailsArray) {
    TextView tv = new TextView(getContext());
    tv.setLayoutParams(new LinearLayout.LayoutParams(
        LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
    tv.setText(text);
    llay.addView(tv); // 只加到 LinearLayout
}
// 不需要 sv.addView(llay);

進階建議

  • 若項目數量大、頻繁更新,改用 RecyclerView + LinearLayoutManager,效能更佳且支援複雜佈局。
  • 動態新增 View 時,設定 LayoutParams 懹對父容器類型(此處為 LinearLayout.LayoutParams)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved