只是一个基本问题:如果我有几十个 EditText 字段是 ListAdapter 的一部分,那么各个 EditText 字段如何知道它们属于哪一行?
目前我正在使用 TextWatcher 来监听文本输入。我尝试扩展 TextWatcher,以便可以将 EditText 的位置传递给 TextWatcher 的构造函数。
但是,当软键盘弹出时,与各个 EditText 字段对应的位置会随机排列。
如何将 EditText 字段跟踪到正确位置?
我正在使用 GridView 进行布局。每个项目的布局都是一个 ImageView,下面有一个 TextView 和 EditText 字段。
每个 EditText 的文本都保存在称为字符串的全局字符串数组中。它最初是空的,由我的 TextWatcher 类更新。
public void initList()
{
ArrayAdapter<String> listAdapter = new ArrayAdapter<String>(this, R.layout.shape, strings)
{
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(getContext()).inflate(R.layout.shape, null);
}
final String theData = getItem(position);
final EditText editText = (EditText) convertView.findViewById(R.id.shape_edittext);
editText.setText(theData);
editText.addTextChangedListener(
new MyTextWatcher(position, editText)
);
ImageView image = (ImageView) convertView.findViewById(R.id.shape_image);
image.setBackgroundResource(images[position]);
TextView text = (TextView) convertView.findViewById(R.id.shape_text);
if (gameType == SHAPES_ABSTRACT)
text.setText("Seq:");
else
text.setVisibility(View.GONE);
return convertView;
}
@Override
public String getItem(int position) { return strings[position]; }
};
grid.setAdapter(listAdapter);
}
private class MyTextWatcher implements TextWatcher {
private int index;
private EditText edittext;
public MyTextWatcher(int index, EditText edittext) {
this.index = index;
this.edittext = edittext;
}
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
public void onTextChanged(CharSequence s, int start, int before, int count) {}
public void afterTextChanged(Editable s) { strings[index] = s.toString(); }
public void setIndex(int newindex) { index = newindex; }
}
当我单击第一个 EditText(见图)时,EditText 会转移到笑脸下方的那个。