我有一个来自库的onclick监听器,它应该清除tableview中的所有行,然后将行/行添加到scrollview内的tableview.每次按下按钮时,片段都应该更改.
但是我得到:java.lang.IllegalStateException:ScrollView只能托管一个直接子项.
myactivity按钮监听器
TrackerFragment tf = (TrackerFragment) getFragmentManager().findFragmentById(R.id.tracker1); tf = TrackerFragment.newInstance(listOfList.get(id).get(position)); fragmentTransaction.add(R.id.tracker1,tf); fragmentTransaction.commit(); t1 = true; //being used getFragmentManager().executePendingTransactions();
跟踪片段
public class TrackerFragment extends Fragment { private Dish dish; public static TrackerFragment newInstance(Serializable dish) { TrackerFragment tf = new TrackerFragment(); Bundle args = new Bundle(); args.putSerializable("dish",dish); tf.setArguments(args); return tf; } public static TrackerFragment newInstance(Bundle bundle) { Dish dish = (Dish) bundle.getSerializable("dish"); return newInstance(dish); } @Override public void onCreate(Bundle myBundle) { super.onCreate(myBundle); } @Override public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) { View v = inflater.inflate(R.layout.tracker,container,false); TableLayout tableLayout = (TableLayout) v.findViewById(R.id.tracker_layout); tableLayout.removeAllViews(); if (dish != null) { //display others //display subsystem stuff for (int i = 0; i < dish.getSubsystems().size(); i++) { TableRow tableRow = new TableRow(v.getContext()); tableRow.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT)); TextView tv = new TextView(v.getContext()); tv.setText(dish.getSubsystems().get(i).getConnFuncAddr()); tableRow.addView(tv); tableLayout.addView(tableRow); } } else { TableRow tableRow = new TableRow(v.getContext()); tableRow.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT)); TextView tv = new TextView(v.getContext()); tv.setText("Click on image to view more data"); tableRow.addView(tv); tableLayout.addView(tableRow); } return v; } }
main.xml中
<?xml version="1.0" encoding="utf-8"?> <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal" xmlns:android="http://schemas.android.com/apk/res/android"> <!-- Trackers --> <LinearLayout android:layout_height="fill_parent" android:layout_width="300dp" android:layout_weight="1" android:orientation="vertical"> <fragment android:name="android.gallery.TrackerFragment" android:id="@+id/tracker1" android:layout_height="500dp" android:layout_width="300dp" android:layout_weight="1"> </fragment> </LinearLayout> <!-- Gallery --> <LinearLayout android:layout_height="fill_parent" android:layout_width="600dp" android:layout_weight="1" android:orientation="vertical"> <LinearLayout android:layout_width="fill_parent" android:layout_height="245dp"> <Gallery android:id="@+id/galleryid0" android:layout_width="fill_parent" android:layout_height="match_parent"/> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="245dp"> <Gallery android:id="@+id/galleryid1" android:layout_width="fill_parent" android:layout_height="match_parent"/> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="245dp"> <Gallery android:id="@+id/galleryid2" android:layout_width="fill_parent" android:layout_height="match_parent"/> </LinearLayout> </LinearLayout> </LinearLayout>
tracker.xml
<?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TableLayout android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/tracker_layout"> </TableLayout> </ScrollView>
解决方法
事实上,你不能有这样的事情:
<?xml version="1.0" encoding="utf-8"?> <ScrollView android:id="@+id/widget27" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#ffffffff" xmlns:android="http://schemas.android.com/apk/res/android" > <TableLayout android:id="@+id/layoutOption" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#ffffffff" xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" > <ImageView android:id="@+id/logoImmoweb" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/logoimmoweb" android:layout_gravity="top" /> ... </TableLayout> </ScrollView>
但如果你在表外有一个额外的元素,它会崩溃java.lang.IllegalStateException:ScrollView只能托管一个直接子节点
例
<ScrollView android:id="@+id/widget27" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#ffffffff" xmlns:android="http://schemas.android.com/apk/res/android" > <ImageView android:id="@+id/logoImmoweb" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/logoimmoweb" android:layout_gravity="top" /> <TableLayout android:id="@+id/layoutOption" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#ffffffff" xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" > ... </TableLayout> </ScrollView>
希望这有帮助.