如何到达listview中编辑文本组中的值

时间:2014-04-02 19:51:21

标签: android listview android-listview

我有一个Listview内容表单TextViewEdittext,我希望从Edittext中的每个Listview获取值。

我的问题是: 创建Listview后,重点不在Edittext中的第一个Listview

第二个问题是,当我在Edittext中输入值并在屏幕中向下移动列表文本时,Edittext中的值已更改或删除,或者值已移至另一个Edittext屏幕。

你可以在这里看到图像 link

我的代码是

        ArrayList<HashMap<String, String>> AllStudent ;
    AllStudent = new ArrayList<HashMap<String, String>>();
    for (int j=0; j<15; j++){
        HashMap<String, String> map = new HashMap<String, String>(); 
        // adding each child node to HashMap key => value
        map.put("id"," " + j);
        map.put("name", "A" + j ); 
        // adding HashList to ArrayList
        AllStudent.add(map);
    }
   listadapter = new SimpleAdapter(
            sc_grade_group.this, AllStudent,
            R.layout.list_item_graed, new String[] { "id","name"  },
            new int[] { R.id.list_itemGra_t1, R.id.list_itemGra_t2 });
    setListAdapter(listadapter); 



    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/list_item_LinearLayout"
    android:layout_width="fill_parent"
    android:layout_height="60dp"
    android:background="@drawable/custom_bg_1"
    android:orientation="horizontal"
    android:padding="2dp"
    android:weightSum="1" >

    <TextView
        android:id="@+id/list_itemGra_t1"
        android:layout_width="50dp"
        android:layout_height="wrap_content"
        android:visibility="gone" />

    <TextView
        android:id="@+id/list_itemGra_t2"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="0.6"
        android:background="@drawable/custom_bg_2"
        android:gravity="left|center_vertical"
        android:paddingLeft="6dip"
        android:paddingTop="6dip"
        android:textColor="@color/black"
        android:textSize="17sp"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/list_itemGra_t4"
        android:layout_width="180dp"
        android:layout_height="match_parent"
        android:layout_weight="0.28"
        android:background="@drawable/custom_bg_2"
        android:gravity="left|center_vertical"
        android:paddingLeft="6dip"
        android:paddingTop="6dip"
        android:textColor="@color/gold"
        android:textSize="13sp"
        android:textStyle="bold"
        android:visibility="gone" />

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="0.33"
        android:background="@color/cachecolor2"
        android:gravity="center_vertical|center_horizontal"
        android:weightSum="1" >

        <EditText
            android:id="@+id/list_itemGra_Degree"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:ems="10"
            android:inputType="numberDecimal" >

            <requestFocus />
        </EditText>

    </LinearLayout>

    <TextView
        android:id="@+id/list_itemGra_t3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:visibility="gone" />

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="0.07"
        android:background="@color/cachecolor2" >

    </LinearLayout>

       <TextView
        android:id="@+id/list_itemGra_t5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:visibility="gone" />

</LinearLayout>

2 个答案:

答案 0 :(得分:0)

首先,如果您希望输入的信息在滚动并向后滚动时应该是持久的,您必须创建一个应该存储输入内容的模型。滚动时会清除所有信息,向后滚动是因为ListView仅重新创建屏幕上可见的视图。

使用过的SimpleAdapter可以与ViewBinder接口连接,虽然它很难处理存储。我的建议是创建一个类模型并为此创建一个自定义适配器。

以下是各种ListView实现(http://www.vogella.com/tutorials/AndroidListView/article.html)的精彩教程。

第二个问题,一旦你进入该区域防止视图聚焦,你可以尝试设置 设置属性android:focusable =&#34; true&#34;和android:focusableInTouchMode =&#34; true&#34;在EditText上,虽然应该测试,但我不确定它是否会起作用。

答案 1 :(得分:0)

1,尝试onCreate:

yourEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        if (!hasFocus) {                                   // run when focus is lost
            String value = v.getText().toString();         // get the value from the EditText
            // Your code to update hashmap
        }
    }
});

2,当您创建 ListView 时,添加 OnFocusChangeListener ,如下所示

myList.setOnFocusChangeListener(new View.OnFocusChangeListener() {
    public void onFocusChange(View v, boolean hasFocus) {
        if (hasFocus) {
            myHandler.postAtFrontOfQueue(new Runnable() {
                public void run() {
                    myList.setSelection(0);
                }
            });
        }
    }
});

如果它不起作用,请阅读Focusable EditText inside ListView