ListView EditText 实现的三种方式

原文网址:http://blog.sina.com.cn/s/blog_682139d001013omd.html
这段时间搞一个android表格,真是搞死人,让我想到iphone开发是何其的简单啊,有种冲动自学iphone开发。先说说android里面的table是怎么制作出来的。
实现方法有三种思路:
1、ListView
2、ScrollView + NoScrollListView(自定义的ListView)
3、ScrollView + Linearlayout
 
因为我每一行有五个元素:
第一个:照相按钮 ImageButton
第二个:文本 TextView
第三个:文本 TextView
第四个:输入框 EditText
第五个:输入框 EditText
 
现在讲解第一种方法的思路。
用纯粹的ListView来展现表格。
布局文件如下:
ListView <wbr>EditText <wbr>实现的三种方式

要在ListView的上面和下面添加横线。

下面是每一行的布局:
ListView <wbr>EditText <wbr>实现的三种方式


ListView <wbr>EditText <wbr>实现的三种方式
 

 
 
在这里每一行,都要放一个view代表竖线。这样才能做出表格的风格。
 
 
然而第一种方法问题出来了,让我百思不得其解的是,我不知道怎么把数据存储
因为ListView会不断地刷新,每当输入法弹出来都会刷新,或者滚动的时候都会不断地
刷新。因此保存数据是一个重点。保存数据怎么保存呢?一开始是在adaper里面的EditText设置
setOnFocusChangeListerner监听器用来监听在输入离开时就把数据保存。这里通过tag把第几行
的位置保存,然后在监听器的实现类里面来获取数据并且保存到全局变量中。
但是此方法缺点是,如果用户没有离开输入框而且又想获取输入框的值,问题就来了。所以此方法
走不通。只能addTextChangeListerner监听器,实现TextWatch接口。但此时让我迷惑的是,我怎么
才能获取是表格哪一行再输入呢。所以就必须把ListView里面的每一行布局都保存在全局变量方可
实现。此方法能走的通,但稍微反锁些。
 
第二种思路是:ScrollView + NoScrollView来实现。
原理是这样的:在外面套一层ScrollView,然后又不让ListView滚动或者说刷新,怎样才能
做到这样呢,只能通过展现ListView的所有行,就是一开始就加载所有行。ListView里面的机制是只要
有滚动就会刷新。而我就一开始就把所有行加载出来,通过ScrollView让它滚动。
ListView <wbr>EditText <wbr>实现的三种方式
所以现在再ListView外面加一个ScrollView就会出现滚动了。然后这样子来操作的话。
如果ListView上面还有其它空间的话,也就是说,ScrollView里面有更复杂的控件的话,那么会导致
滚动很慢很慢。
在这里获取数据还有另外一个思路,哈哈。
是这样的。因为不用刷新ListView了,就可以直接获取数据,怎么获取数据呢?通过ListView获取
到Adapter,然后通过Adapter得到数据,大家要明白,Adapter是ListView和数据的桥梁,通过Adapter肯定能
获取每一行的数据,比如拍照的照片,输入框的值,都可以得到。
 
效果图如下:
ListView <wbr>EditText <wbr>实现的三种方式

右边空白是输入框。
第三种方法是ScrollView + LinearLayout
思路很简单,就是在Linearlayout里面有很多行LinearLayout,直接上图。ListView <wbr>EditText <wbr>实现的三种方式

 
 
<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="49dip"
    android:orientation="vertical" >
 
    <LinearLayout
        android:id="@id/lm_linearlayout2"
        android:layout_width="fill_parent"
        android:layout_height="48dip"
        android:orientation="horizontal" >
 
 
        <View style="@style/onePixelView" />
 
        <ImageButton
            android:id="@id/lm_button1"
            android:layout_width="48dip"
            android:layout_height="48dip"
            android:background="@drawable/lm_camera_btn_bg"
            android:focusable="false" />
 
        <View style="@style/onePixelView" />
 
        <TextView
            android:id="@id/lm_item_text1"
            android:layout_width="80dip"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:gravity="center"
            android:textColor="@color/black"
            android:textSize="14sp" />
 
        <View style="@style/onePixelView" />
 
        <TextView
            android:id="@id/lm_item_text2"
            android:layout_width="45dip"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:gravity="center"
            android:textColor="@color/black"
            android:textSize="14sp" />
 
        <View style="@style/onePixelView" />
 
        <EditText
            android:id="@id/lm_item_editText1"
            style="@style/my_edittext_style"
            android:layout_width="45dip"
            android:layout_height="fill_parent"
            android:layout_gravity="center"
            android:gravity="center"
            android:inputType="number"
            android:textSize="14sp" />
 
        <View style="@style/onePixelView" />
 
        <EditText
            android:id="@id/lm_item_editText2"
            style="@style/my_edittext_style"
            android:layout_width="wrap_content"
            android:layout_height="fill_parent"
            android:layout_gravity="center"
            android:layout_weight="1"
            android:gravity="left"
            android:maxLines="3"
            android:numeric="integer"
            android:padding="2dip"
            android:phoneNumber="true"
            android:singleLine="false"
            android:textSize="14sp" />
 
        <View style="@style/onePixelView" />
    </LinearLayout>
 
    <View
        android:layout_width="fill_parent"
        android:layout_height="0.1dp"
        android:background="#125a95" />
 
</LinearLayout>
posted @ 2013-09-06 10:15  小飞。  阅读(2303)  评论(0编辑  收藏  举报