基本的な質問:ListAdapterの一部であるEditTextフィールドが数十ある場合、個々のEditTextフィールドはどの行に属しているかをどのように知ることができますか?
現在、TextWatcherを使用してテキスト入力をリッスンしています。EditTextの位置をTextWatcherのコンストラクターに渡すことができるように、TextWatcherを拡張してみました。
ただし、ソフトキーボードがポップアップすると、さまざまなEditTextフィールドに対応する位置がシャッフルされます。
EditTextフィールドを適切な位置まで追跡するにはどうすればよいですか?
私はGridViewを使用して物事をレイアウトしています。各アイテムのレイアウトは、その下にTextViewフィールドとEditTextフィールドがあるImageViewです。
各EditTextのテキストは、stringsと呼ばれるグローバルString配列に保持されます。最初は空で、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がスマイリーフェイスの下に移動します。