Tablelayout滚动型不工作 [英] Tablelayout in Scrollview not working
问题描述
我的片段加载其数据到一个滚动视图内tablelayout。首先,它会加载说点击图片查看更多数据。结果
我从那个应该删除所有来自tablelayout行与的画廊的onclick监听tableLayout.removeAllViews();
。然后将片段行/行添加到滚动视图内tablelayout。
该tablelayout应该改变从库中每一次点击。
但是我得到:** java.lang.IllegalStateException:滚动型只能承载一个直接子。
这条线显示了在logcat的上述错误: getFragmentManager()executePendingTransactions();
在我addToTracker功能
画廊活动
公共类GalleryActivity扩展活动
{
私人画廊[]图库视图;
私人的ArrayList< ArrayList的<&盘GT;> listOfList; / **当第一次创建活动调用。 * /
@覆盖
公共无效的onCreate(捆绑savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.main); =图库视图新画廊[3]; //对于每个3个点的
图库视图[0] =(图库论坛)findViewById(R.id.galleryid0);
图库视图[1] =(图库论坛)findViewById(R.id.galleryid1);
图库视图[2] =(图库论坛)findViewById(R.id.galleryid2); 最终FragmentManager fragmentManager = getFragmentManager();
最终FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 图库视图[0] .setOnItemClickListener(新OnItemClickListener()
{
公共无效onItemClick(适配器视图父母,视图V,INT位置,长的ID)
{
addToTracker(0,位置fragmentTransaction);
}
}); 图库视图[1] .setOnItemClickListener(新OnItemClickListener()
{
公共无效onItemClick(适配器视图父母,视图V,INT位置,长的ID)
{
addToTracker(1,位置fragmentTransaction);
}
}); 图库视图[2] .setOnItemClickListener(新OnItemClickListener()
{
公共无效onItemClick(适配器视图父母,视图V,INT位置,长的ID)
{
addToTracker(2位,fragmentTransaction);
}
});
} 私人无效addToTracker(INT ID,INT位置,FragmentTransaction fragmentTransaction)
{
TrackerFragment TF =(TrackerFragment)getFragmentManager()findFragmentById(R.id.tracker1)。
fragmentTransaction.remove(TF);
TF = TrackerFragment.newInstance(listOfList.get(ID)获得(位置)); fragmentTransaction.replace(R.id.tracker1,TF);
fragmentTransaction.commitAllowingStateLoss();
getFragmentManager()executePendingTransactions()。
}
跟踪片段
公共类TrackerFragment扩展片段
{
私家菜盘; 公共静态的newInstance TrackerFragment(序列化碟)
{
TrackerFragment TF =新TrackerFragment(); 捆绑ARGS =新包();
args.putSerializable(菜,菜肴);
tf.setArguments(参数); 返回TF;
} 公共静态的newInstance TrackerFragment(包捆)
{
碟碟=(菜)bundle.getSerializable(菜);
返回的newInstance(盘);
} @覆盖
公共无效的onCreate(捆绑myBundle)
{
super.onCreate(myBundle);
} @覆盖
公共查看onCreateView(LayoutInflater充气器,容器的ViewGroup,
捆绑savedInstanceState)
{
视图V = inflater.inflate(R.layout.tracker,集装箱,FALSE); TableLayout tableLayout =(TableLayout)v.findViewById(R.id.tracker_layout);
tableLayout.removeAllViews(); 如果(菜!= NULL)
{
//显示他人 //显示子系统的东西
的for(int i = 0; I< dish.getSubsystems()大小();我++)
{
的TableRow的TableRow =新的TableRow(v.getContext());
tableRow.setLayoutParams(新的LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT)); TextView的电视=新的TextView(v.getContext());
tv.setText(dish.getSubsystems()获得(I).getConnFuncAddr()); tableRow.addView(电视); tableLayout.addView(tablerow的);
}
}
其他
{
的TableRow的TableRow =新的TableRow(v.getContext());
tableRow.setLayoutParams(新的LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT)); TextView的电视=新的TextView(v.getContext());
tv.setText(点击图片查看更多数据); tableRow.addView(电视); tableLayout.addView(tablerow的);
} 返回伏;
}
}
的main.xml
<?XML版本=1.0编码=UTF-8&GT?;
<的LinearLayout
机器人:layout_width =FILL_PARENT
机器人:layout_height =FILL_PARENT
机器人:方向=横向
的xmlns:机器人=http://schemas.android.com/apk/res/android> <! - 跟踪器 - >
<的LinearLayout
机器人:layout_height =FILL_PARENT
机器人:layout_width =300dp
机器人:layout_weight =1
机器人:方向=垂直> <片段
机器人:名字=android.gallery.TrackerFragment
机器人:ID =@ + ID / tracker1
机器人:layout_height =500dp
机器人:layout_width =300dp
机器人:layout_weight =1>
&所述; /片断> < / LinearLayout中> <! - 画廊 - >
<的LinearLayout
机器人:layout_height =FILL_PARENT
机器人:layout_width =600dp的
机器人:layout_weight =1
机器人:方向=垂直> <的LinearLayout
机器人:layout_width =FILL_PARENT
机器人:layout_height =245dp> <画廊
机器人:ID =@ + ID / galleryid0
机器人:layout_width =FILL_PARENT
机器人:layout_height =match_parent/> < / LinearLayout中> <的LinearLayout
机器人:layout_width =FILL_PARENT
机器人:layout_height =245dp> <画廊
机器人:ID =@ + ID / galleryid1
机器人:layout_width =FILL_PARENT
机器人:layout_height =match_parent/> < / LinearLayout中> <的LinearLayout
机器人:layout_width =FILL_PARENT
机器人:layout_height =245dp> <画廊
机器人:ID =@ + ID / galleryid2
机器人:layout_width =FILL_PARENT
机器人:layout_height =match_parent/> < / LinearLayout中> < / LinearLayout中>< / LinearLayout中>
tracker.xml
<?XML版本=1.0编码=UTF-8&GT?;
<滚动型
的xmlns:机器人=http://schemas.android.com/apk/res/android
机器人:方向=垂直
机器人:layout_width =match_parent
机器人:layout_height =match_parent> < RelativeLayout的
机器人:layout_width =FILL_PARENT
机器人:layout_height =FILL_PARENT
机器人:方向=垂直> <的TextView
机器人:layout_height =WRAP_CONTENT
机器人:layout_width =250dp
机器人:文字=1追踪
机器人:ID =@ + ID / T1/> <的ImageButton
机器人:layout_height =WRAP_CONTENT
机器人:layout_width =WRAP_CONTENT
机器人:SRC =@绘制/ delete2
安卓的onClick =remove1
机器人:layout_toRightOf =@ ID / T1/> < TableLayout
的xmlns:机器人=http://schemas.android.com/apk/res/android
机器人:layout_width =FILL_PARENT
机器人:layout_height =WRAP_CONTENT
机器人:ID =@ + ID / tracker_layout
机器人:layout_below =@ ID / T1
机器人:layout_marginTop =40dp> < / TableLayout> < / RelativeLayout的>< /滚动型>
有谁知道什么是错?我猜我增加了表行的滚动视图,而不是tablelayout,但是,我不看到我这样做,错在我的code。
以这种方式创建Tablelaout
< XML版本=1.0编码=UTF-8&GT?;
<滚动型的xmlns:机器人=http://schemas.android.com/apk/res/android
机器人:layout_width =match_parent
机器人:layout_height =match_parent> < TableLayout
机器人:ID =@ + ID / data_table
机器人:layout_width =FILL_PARENT
机器人:layout_height =WRAP_CONTENT
>
< / TableLayout>
< /滚动型>
My fragment loads its data into a tablelayout inside a scrollview. At first, it will load saying "Click on image to view more data".
I have a onclick listener from the gallery that should delete all the rows from the tablelayout with tableLayout.removeAllViews();
. Then the fragment will add row/rows to a tablelayout inside a scrollview.
The tablelayout should change on every click from the gallery.
However I am getting: **java.lang.IllegalStateException: ScrollView can host only one direct child.
This line shows up with the above error in logcat: getFragmentManager().executePendingTransactions();
in my addToTracker function.
gallery activity
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();
}
tracker fragment
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>
Does anyone know whats wrong? I am guessing I am adding a table row to the scrollview and not the tablelayout, however, I dont see where I am doing that wrong in my code.
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>
这篇关于Tablelayout滚动型不工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!