我有一个Listview
内容表单TextView
和Edittext
,我希望从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>
答案 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