0 0

Android listview下面嵌套一个TableLayout问题?30

UI的XML代码:main.xml

 <?xml version="1.0" encoding="utf-8"?>  

 <LinearLayout  

     android:id="@+id/LinearLayout01"  

     android:layout_width="fill_parent"  

     android:layout_height="fill_parent"  

     xmlns:android="http://schemas.android.com/apk/res/android">  

        

     <ListView android:layout_width="wrap_content"  

               android:layout_height="wrap_content"  

               android:id="@+id/MyListView">  

     </ListView>  

 </LinearLayout> 

   

 my_listitem.xml的代码如下,my_listitem.xml用于设计ListView的Item 

   

  <?xml version="1.0" encoding="utf-8"?>   

 <LinearLayout   

     android:layout_width="fill_parent"   

     xmlns:android="http://schemas.android.com/apk/res/android"   

     android:orientation="vertical"  

     android:layout_height="wrap_content"   

     android:id="@+id/MyListItem"   

     android:paddingBottom="3dip"   

     android:paddingLeft="10dip">   

     <TextView   

             android:layout_height="wrap_content"   

             android:layout_width="fill_parent"   

             android:id="@+id/ItemTitle"   

             android:textSize="30dip">   

     </TextView>   

     <TextView   

             android:layout_height="wrap_content"   

             android:layout_width="fill_parent"   

             android:id="@+id/ItemText">   

     </TextView>   

   

     <TableLayout 

         android:id="@+id/tl"

         android:layout_width="fill_parent"

         android:layout_height="wrap_content"

         android:stretchColumns="0,1"> 

     <TableRow> 

         <TextView 

             android:layout_height="wrap_content"

             android:text="a1"/> 

         <TextView 

             android:layout_height="wrap_content"

             android:text="a2"/> 

     </TableRow> 

     <TableRow> 

         <TextView 

             android:id="@+id/a1"

             android:layout_height="wrap_content"/> 

         <TextView 

             android:id="@+id/a2"

             android:layout_height="wrap_content"/> 

     </TableRow> 

    </TableLayout> 

 </LinearLayout>


如果没有TableLayout的情况下是这样的循环的:

 

 public void onCreate(Bundle savedInstanceState) {   

     super.onCreate(savedInstanceState);   

     setContentView(R.layout.main);   

     //绑定XML中的ListView,作为Item的容器   

     ListView list = (ListView) findViewById(R.id.MyListView);   

     ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();   

     for(int i=0;i<30;i++)  {   

         HashMap<String, String> map = new HashMap<String, String>();   

         map.put("ItemTitle", "This is Titl");   

         map.put("ItemText", "This is text");   

         mylist.add(map);   

     }   

     SimpleAdapter mSchedule = new SimpleAdapter(this,    

         mylist, 

         R.layout.my_listitem,        

         new String[] {"ItemTitle", "ItemText"},  

         new int[] {R.id.ItemTitle,R.id.ItemText});   

     list.setAdapter(mSchedule);   

 }

 

问题:这个listview下面的TableLayout的数据我是从数据库取出来循环显示的,那么我怎么写呢?

 


问题补充:<div class="quote_title">renpeng301 写道</div><div class="quote_div"><pre name="code" class="java">你这个不能这样直接用SimpleAdapter
需要自定义 adapter

再getview里面来做

例如 public MyAdapter extends BaseAdapter{

//这个date 你再要用MyAdapter  提供 ,这个不管你从数据库来的 还是哪里来得 变成一个  list或者其它的数据结构传进来
public MyAdapter(List date){
....

}

public View getView(){
再这里来设置要显示的内容
吧date的数据 显示到你要显示的控件上。。。
}
}
</pre> <br /></div> <br />首先感谢您的回答,我是初学者,能不能详细一些呢 譬如在MyAdapter 里面怎么获取到TableLayout。。。

问题补充:<div class="quote_title">renpeng301 写道</div><div class="quote_div"><pre name="code" class="java">

首先感谢您的回答,我是初学者,能不能详细一些呢 譬如在MyAdapter 里面怎么获取到TableLayout。。。

你先load 你的listitem.xml
然后findViewById(R.id.tl)


public class ListViewAdapter extends BaseAdapter {  
private Context context;                        //运行上下文  
    private List&lt;Map&lt;String, Object&gt;&gt; listItems;   
    private LayoutInflater listContainer;           //视图容器  
public ListViewAdapter(Context context, List&lt;Map&lt;String, Object&gt;&gt; listItems) {  
        this.context = context;           
        listContainer = LayoutInflater.from(context);   //创建视图容器并设置下文  
        this.listItems = listItems;  
    }  
public View getView(int position, View convertView, ViewGroup parent) {
convertView = listContainer.inflate(R.layout.list_item, null); //加载你的listview的item布局
然后 convertView.findViewById(R.id.tl)这样获得TableLayout

}
}
</pre></div> <br />您好,这样获得TableLayout以后内部的TableRow对象就怎么创建呢? <br />是new 一个呢(new的话 new TableRow(???),那么??填什么,是你这边定义的context?);还是findViewById呢? <br />如果是findViewById的话增内部TextView的话会抛出异常。。。应该怎么解决?。。。。

问题补充:<div class="quote_title">renpeng301 写道</div><div class="quote_div"><pre name="code" class="java">自定义得private Context context;     

用得时候从构造器传过来
</pre></div> <br />那这么说我下面的代码都要去掉: <br /><span style="color: red">&lt;TableRow&gt;&nbsp; <br /> <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;TextView&nbsp; <br /> <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; android:layout_height="wrap_content" <br /> <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; android:text="a1"/&gt;&nbsp; <br /> <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;TextView&nbsp; <br /> <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; android:layout_height="wrap_content" <br /> <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; android:text="a2"/&gt;&nbsp; <br /> <br />&nbsp;&nbsp;&nbsp;&nbsp; &lt;/TableRow&gt;&nbsp; <br /> <br />&nbsp;&nbsp;&nbsp;&nbsp; &lt;TableRow&gt;&nbsp; <br /> <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;TextView&nbsp; <br /> <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; android:id="@+id/a1" <br /> <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; android:layout_height="wrap_content"/&gt;&nbsp; <br /> <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;TextView&nbsp; <br /> <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; android:id="@+id/a2" <br /> <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; android:layout_height="wrap_content"/&gt;&nbsp; <br /> <br />&nbsp;&nbsp;&nbsp;&nbsp; &lt;/TableRow&gt;&nbsp; </span>

问题补充:<div class="quote_title">renpeng301 写道</div><div class="quote_div"><pre name="code" class="java">不用 如果说你得
TableLayout  固定了 直接都用findViewById
&lt;TextView

             android:id="@+id/a1"

             android:layout_height="wrap_content"/&gt;

         &lt;TextView

             android:id="@+id/a2"

             android:layout_height="wrap_content"/&gt; 

findViewById(R.id.a1)...
</pre></div> <br />那for怎么把数据循环填充到TableRow里面去。。。郁闷啊... 就差这一个了

问题补充:<div class="quote_title">renpeng301 写道</div><div class="quote_div"><pre name="code" class="java">不用 如果说你得
TableLayout  固定了 直接都用findViewById
&lt;TextView

             android:id="@+id/a1"

             android:layout_height="wrap_content"/&gt;

         &lt;TextView

             android:id="@+id/a2"

             android:layout_height="wrap_content"/&gt; 

findViewById(R.id.a1)...
</pre></div> <br />我增加一行的时候会抛出java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first. <br />这个异常...
2012年1月06日 19:16

6个答案 按时间排序 按投票排序

0 0

采纳的答案

TableLayout container_table = (TableLayout )findViewById(R.id.tl);

container_table.clearxxxxx;

TabRow header = new TabRow(...)

TextView column_1 = new TextView();
column_1.setText("column_1");

header.add(column_1);

TextView column_2 = new TextView();
column_2.setText("column_2");

header.add(column_2);
container_table.add(header);

for(Item: List<Item>) {
   TabRow row = new TabRow();
    如上。。。。
 
  container_table.add(row);
}

2012年1月06日 20:52
0 0

不用 如果说你得
TableLayout  固定了 直接都用findViewById
<TextView 

             android:id="@+id/a1"

             android:layout_height="wrap_content"/> 

         <TextView 

             android:id="@+id/a2"

             android:layout_height="wrap_content"/>  

findViewById(R.id.a1)...

2012年1月07日 12:39
0 0

自定义得private Context context;      

用得时候从构造器传过来

2012年1月07日 11:58
0 0


首先感谢您的回答,我是初学者,能不能详细一些呢 譬如在MyAdapter 里面怎么获取到TableLayout。。。 

你先load 你的listitem.xml
然后findViewById(R.id.tl)


public class ListViewAdapter extends BaseAdapter {   
private Context context;                        //运行上下文   
    private List<Map<String, Object>> listItems;    
    private LayoutInflater listContainer;           //视图容器   
 public ListViewAdapter(Context context, List<Map<String, Object>> listItems) {   
        this.context = context;            
        listContainer = LayoutInflater.from(context);   //创建视图容器并设置下文   
        this.listItems = listItems;   
    }   
 public View getView(int position, View convertView, ViewGroup parent) { 
 convertView = listContainer.inflate(R.layout.list_item, null); //加载你的listview的item布局
然后 convertView.findViewById(R.id.tl)这样获得TableLayout

}
}

2012年1月07日 09:29
0 0


先加载list_item.xml
然后

findviewbyid()

2012年1月06日 20:01
0 0

你这个不能这样直接用SimpleAdapter 
需要自定义 adapter

再getview里面来做

例如 public MyAdapter extends BaseAdapter{

//这个date 你再要用MyAdapter  提供 ,这个不管你从数据库来的 还是哪里来得 变成一个  list或者其它的数据结构传进来
public MyAdapter(List date){
....

}

public View getView(){
再这里来设置要显示的内容
吧date的数据 显示到你要显示的控件上。。。
}
}

2012年1月06日 19:26

相关推荐

    expandlist嵌套双listview

    在Android开发中,"expandlist嵌套双listview"是一个复杂但常见的需求,尤其是在构建具有层级结构和丰富信息展示的应用时。ExpandableListView是Android SDK提供的一种可扩展的列表控件,它可以显示一个父列表项,...

    android之layout(二)RelativeLayout, TableLayout

    1. **属性定位**:通过`android:above`, `android:below`, `android:toLeftOf`, `android:toRightOf`等属性,一个视图可以相对于另一个视图的位置进行布局。 2. **对齐方式**:利用`android:alignParentTop`, `...

    ListView横向类似Gallery效果

    然而,有时开发者可能希望实现更复杂的效果,比如让ListView的第一项显示一个TableLayout,其中包含横向排列的ImageView,模仿Gallery的效果。这种设计可以增加用户界面的交互性和吸引力。 首先,我们需要理解...

    tablelayout实现表格效果

    在Android开发中,TableLayout是布局管理器的一种,它允许开发者创建类似电子表格的布局,非常适合展示数据或者组织内容。本篇文章将详细讲解如何利用TableLayout在Android中实现表格效果。 **1. TableLayout基本...

    Android-一个看起来像TableView的RecyclerView可以同时水平和垂直滚动一个固定的标题

    总之,这个项目展示了如何通过定制RecyclerView来实现复杂的数据展示需求,结合Android的嵌套滚动、自定义适配器和布局管理器等特性,创建出一个既美观又实用的表格视图。对于开发者来说,这是一个学习如何扩展...

    tablelayout 动态

    在Android开发中,TableLayout是一种常用的布局管理器,它允许开发者创建类似电子表格的布局,包含行和列。TableLayout动态布局是指在运行时根据需求动态添加、删除或修改TableLayout中的TableRow及其内容。这种技术...

    Android ListView优化之提高android应用效率

    在Android开发中,ListView是一个非常重要的组件,常用于展示大量数据列表。然而,如果不进行适当的优化,ListView在处理大量数据时可能会导致性能问题,影响应用的整体效率。以下是一些关于如何优化Android ...

    design tablelayout demo

    标题中的“design tablelayout demo”表明这是一个关于Android界面设计中TableLayout布局的示例应用。TableLayout是Android SDK中的一种布局管理器,主要用于创建表格样式的用户界面。它继承自GridLayout,但提供了...

    Android开发view的几种布局方式[定义].pdf

    ListView是一个可滚动的视图,用于展示大量的数据。数据通过ListAdapter与ListView关联,ListAdapter是数据源和视图之间的适配器。ListView支持多种类型的Adapter,如ArrayAdapter(用于简单字符串数组)、...

    android table

    在Android开发中,"table"通常指的是表格布局(TableLayout),它是Android的一种视图组(ViewGroup)类,用于组织多个视图(Views)或视图组(ViewGroups)成行和列,类似于HTML中的元素。TableLayout提供了一种...

    Android 40 道面试题及答案.docx

    5. TableLayout(表格布局):表格布局,每一个 TableLayout 里面有表格行 TableRow,TableRow 里面可以具体定义每一个元素。每一个布局都有自己适合的方式,这五个布局元素可以相互嵌套应用,做出美观的界面。 三...

    Android开发案例驱动教程 配套代码

    第3章 第一个Android程序 15 3.1 HelloAndroid 15 3.1.1 在Eclipse中创建项目 15 3.1.2 编写程序项目代码 17 3.1.3 运行HelloAndroid 18 3.1.4 Android工程目录 19 3.1.5 AndroidManifest.xml文件 21 3.2 ...

    Android开发资料合集-World版!

    - 解决LISTVIEW嵌套在SCROLLVIEW中的问题,以及3D魔方等特效。 7. **Android UI动画**: - 介绍了2D动画,包括透明度、旋转、缩放和位移动画,以及如何组合和使用这些动画效果。 8. **异步调用**: - 讲述了...

    《第一行Android代码》课件:第三章 UI点点滴滴.pptx

    Android提供了四种基本布局:LinearLayout(线性布局)、RelativeLayout(相对布局)、FrameLayout(帧布局)和TableLayout(表格布局)。这些布局可以帮助开发者灵活地组织和排列控件。 3.4 自定义控件 当系统默认...

    Android动态加载布局

    ListView我们一直都在用,只不过当...第一种方案:我们可以用GridView来实现,GridView和ListView的用法是一样的,俗称九宫格排列,那么我们可以将GridView的一行排列九张图片来显示这些头像,只不过ListView嵌套着

    Android开发 - 布局

    总之,Android布局设计是一个综合性的过程,需要理解各种布局类型及其属性,合理利用可视化工具,并注重性能优化。熟练掌握布局技巧将有助于构建高效、美观且响应式的Android应用。通过持续学习和实践,开发者可以...

    Android开发技巧合集

    **概述**:Activity是Android四大组件之一,它代表了一个屏幕上的“窗口”。用户可以通过Activity与应用进行交互。 **Activity的生命周期**:包括以下几个阶段: - onCreate():创建Activity时调用。 - onStart():...

    android布局精解

    它提供了一种灵活的方式来创建复杂的布局,而无需嵌套多个布局层。通过使用如`android:layout_above`、`android:layout_toRightOf`等属性,可以轻松地调整子View的相对位置。 #### 4、表格布局(TableLayout) ...

    Android课件(布局练习).zip

    - **嵌套布局**:在一个布局中包含另一个布局,以实现更复杂的界面结构。 - **动态布局**:在代码中动态添加、删除或修改视图,适用于某些需要在运行时改变布局的情况。 - **响应式布局**:学习如何利用`dp`、`sp`...

    TableLayout:Ejercicio de datos dinamicos摆在桌子上

    - 如果需要对表格进行滚动,可以将TableLayout嵌套在ScrollView或HorizontalScrollView中,但需要注意性能问题,因为这可能导致整个表格的渲染延迟。 5. **实战案例** - "TableLayout:Ejercicio de datos ...

Global site tag (gtag.js) - Google Analytics