我正面临一个问题,我需要在scrollview中生成一个在另一个下方的动态视图。点击按钮后应生成视图。
对于第一个按钮单击,它工作正常但在第二次单击后失败并显示错误“java.lang.IllegalStateException:ScrollView只能托管一个直接子项”
任何人都可以帮我解决这个问题。
我的主要活动布局,其中scrollview是activity_main.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"
tools:context=".MainActivity" android:layout_width="match_parent" android:layout_height="match_parent"
android:id="@+id/parentRL">
<Spinner android:id="@+id/spinState" android:layout_width="wrap_content" android:layout_height="wrap_content"/>
<Spinner android:id="@+id/spinCity" android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_below="@id/spinState"/>
<TextView android:id="@+id/cityCount" android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_toRightOf="@id/spinCity" android:layout_below="@id/spinState" android:layout_marginLeft="5dp"
android:textIsSelectable="false"/>
<Button android:id="@+id/showAddress" android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_toRightOf="@id/spinState" android:onClick="populateAddress" android:text="Search"/>
<ScrollView android:id="@+id/scView" android:layout_width="match_parent" android:layout_height="wrap_content"
android:layout_below="@id/spinCity">
</ScrollView>
</RelativeLayout>
需要使用scrollview附加的视图布局是address_layout.xml:
<?xml version="1.0" encoding="utf-8"?>
<TextView android:id="@+id/center" android:layout_width="wrap_content" xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content" android:text="@string/hello_world" android:layout_margin="10dp"
android:textColor="#FF0000" android:textSize="30dp"
/>
在主要活动中,单击内部按钮单击侦听器:
LayoutInflater inflater = (LayoutInflater)MainActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View myView = inflater.inflate(R.layout.address_layout, null);
TextView _c_ = (TextView)(myView.findViewById(R.id.center));
_c_.setVisibility(View.VISIBLE);
_c_.setText(my_random_number);
View insertPoint = findViewById(R.id.scView);
((ViewGroup) insertPoint).addView(myView, 0, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
答案 0 :(得分:0)
android scrollview仅支持child,因此它会抛出java.lang.IllegalStateException。 您应该在scrollview中添加一个LinearLayout或Relative布局,然后将子项添加到该布局中。
<ScrollView android:id="@+id/scView" android:layout_width="match_parent" android:layout_height="wrap_content"
android:layout_below="@id/spinCity">
<LinearLayout android:id="@+id/layout"
android:layout_width="match_parent" android:layout_height="wrap_content">
</LinearLayout>
</ScrollView>