Tablelayout滚动型不工作 [英] Tablelayout in Scrollview not working

查看:202
本文介绍了Tablelayout滚动型不工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的片段加载其数据到一个滚动视图内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:机器人=htt​​p://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:机器人=htt​​p://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:机器人=htt​​p://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:机器人=htt​​p://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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆