我正在使用ListView实现一个表单。 ListView中的每一行都包含一个与描述输入类型的TextView相关联的EditText,因此被定义:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView android:id="@+id/textFormItem"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textSize="16sp"
android:ellipsize="end" android:singleLine="true" />
<EditText android:id="@+id/editFormItem"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:scrollHorizontally="true" />
</LinearLayout>
我正在实现一个子类SimpleAdapter的自定义适配器。到目前为止,代码看起来像这样:
public class FormAdapter extends SimpleAdapter {
public static final String KEY = "key";
static final String[] FROM = { KEY };
static final int[] TO = { R.id.textFormItem };
private static ICUApplication app;
private FormAdapter(Context context, List<? extends Map<String, ?>> data) {
super(context, data, R.layout.form_item, FROM, TO);
setViewBinder(VIEW_BINDER);
}
public static FormAdapter createAdapter (Context ctx, Set<String> dataTypeSet) {
List<Map<String,String>> data =
new ArrayList<Map<String,String>>(dataTypeSet.size());
for (String dataType : dataTypeSet) {
Map<String,String> map = new HashMap<String,String>();
map.put(KEY, dataType);
data.add(map);
}
app = (ICUApplication) ctx.getApplicationContext();
return new FormAdapter(ctx, data);
}
static final SimpleAdapter.ViewBinder VIEW_BINDER = new SimpleAdapter.ViewBinder() {
@Override
public boolean setViewValue(View view, Object data,
String textRepresentation) {
int viewId = view.getId();
switch (viewId){
case R.id.textFormItem:
String key = (String) data;
((TextView) view).setText(app.getTypeNameForKey(key));
}
return true;
}
};
}
一些注意事项:我实现视图绑定器的原因是我希望ListView显示数据类型的用户友好名称(由app.getTypeNameForKey(key)
给出),同时在内部按{{1}存储每一行}}。此外,目前使用这两个类的Activity只有将ListView设置为使用此适配器的代码。
早些时候,由于EditText焦点问题很难弄清楚究竟发生了什么,我使用前面提到的问题解决了这个问题:Focusable EditText inside ListView。目前,我在表单中有三个项目。所以,这是一个奇怪的错误:
关于为什么会发生这种情况以及如何解决这个问题的任何想法?