我的片段将其数据加载到scrollview中的tablelayout中。首先,它会加载说“点击图片查看更多数据”
我有一个来自图库的onclick监听器,它应该使用tableLayout.removeAllViews();
删除tablelayout中的所有行。然后该片段将行/行添加到scrollview内的tablelayout。
每次点击图库时,tablelayout都会发生变化。
但是我得到了:** java.lang.IllegalStateException:ScrollView只能托管一个直接子项。
这一行在我的addToTracker函数中的logcat:getFragmentManager().executePendingTransactions();
中显示上述错误。
图库活动
public class GalleryActivity extends Activity
{
private Gallery[] galleryView;
private ArrayList<ArrayList<Dish>> listOfList;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
galleryView = new Gallery[3];
//for each of the 3 sites
galleryView[0] = (Gallery)findViewById(R.id.galleryid0);
galleryView[1] = (Gallery)findViewById(R.id.galleryid1);
galleryView[2] = (Gallery)findViewById(R.id.galleryid2);
final FragmentManager fragmentManager = getFragmentManager();
final FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
galleryView[0].setOnItemClickListener(new OnItemClickListener()
{
public void onItemClick(AdapterView parent, View v, int position, long id)
{
addToTracker(0, position, fragmentTransaction);
}
});
galleryView[1].setOnItemClickListener(new OnItemClickListener()
{
public void onItemClick(AdapterView parent, View v, int position, long id)
{
addToTracker(1, position, fragmentTransaction);
}
});
galleryView[2].setOnItemClickListener(new OnItemClickListener()
{
public void onItemClick(AdapterView parent, View v, int position, long id)
{
addToTracker(2, position, fragmentTransaction);
}
});
}
private void addToTracker(int id, int position, FragmentTransaction fragmentTransaction)
{
TrackerFragment tf = (TrackerFragment) getFragmentManager().findFragmentById(R.id.tracker1);
fragmentTransaction.remove(tf);
tf = TrackerFragment.newInstance(listOfList.get(id).get(position));
fragmentTransaction.replace(R.id.tracker1, tf);
fragmentTransaction.commitAllowingStateLoss();
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">
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:layout_height="wrap_content"
android:layout_width="250dp"
android:text="Tracker 1"
android:id="@+id/t1"/>
<ImageButton
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:src="@drawable/delete2"
android:onClick="remove1"
android:layout_toRightOf="@id/t1" />
<TableLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/tracker_layout"
android:layout_below="@id/t1"
android:layout_marginTop="40dp">
</TableLayout>
</RelativeLayout>
</ScrollView>
有谁知道什么是错的?我猜我在滚动视图中添加了一个表行而不是tablelayout,但是,我在代码中看不到我在做错的地方。
答案 0 :(得分:1)
Create Tablelaout in this way
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TableLayout
android:id="@+id/data_table"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
</TableLayout>
</ScrollView>