我正在努力使用一个充满EditText的listview来安静一段时间,而且我找不到一种方法来完成我的任务,而不会做一些棘手的事情。
我使用了一个最小化的项目,使其更容易讨论。
我有一个用于询问信息的ListView。布局部分非常基础:
activity_main.xml中
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.beuvelet.myapplication.MainActivity">
<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:descendantFocusability="beforeDescendants"/>
</RelativeLayout>
list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/LinearLayout02"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginBottom="0dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginTop="10dp"
android:gravity="center_vertical|center">
<TextView
android:id="@+id/textQuestion"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|left"
android:layout_marginLeft="10dp"
android:text="texte"
android:textSize="23sp"/>
<LinearLayout
android:id="@+id/LinearLayout01"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|right"
android:gravity="center_vertical|right">
<EditText
android:id="@+id/editText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:minWidth="125dp"/>
</LinearLayout>
</LinearLayout>
这是我的适配器的getView:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v;
v = getLayoutInflater().inflate(R.layout.list_item, null);
EditText edit = (EditText) v.findViewById(R.id.editText);
edit.setText(listString.get(position));
edit.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
System.out.println("hasFocus");
} else {
System.out.println("noFocus");
}
}
});
return v;
}
我想在失去焦点时验证editText的值。
问题是每次我在editText上clic时,我都会得到这个logcat:
I/System.out: hasFocus
I/System.out: noFocus
I/System.out: hasFocus
I/System.out: noFocus
I/System.out: hasFocus
I/System.out: noFocus
I/System.out: hasFocus
每次都会经历OnFocusChangeListener 7次。如果noFocus事件的侦听器中有一些验证方法,则可以连续调用3次。
为什么会有这么多电话?
我可以使用变量,保存一些状态,但在我的情况下会有点棘手,我更喜欢尝试理解这种行为。
感谢阅读。 (sry for bad english:p)