我使用下面的代码在 list view 中显示edit boxes
现在每一个 ListView item 包含以下模式:
[EditText 1] [EditText 2] [EditText 3 ][EditText 4][EditText 5]
class CustomArrayAdapterForScore extends ArrayAdapter<ScoreModel>
{
public CustomArrayAdapterForScore()
{
super(MeetScore.this, R.layout.score_event_layout, myScoreArray);
}
@Override
public View getView(final int position, View convertView, ViewGroup parent)
{
View view = null;
LayoutInflater inflator = MeetScore.this.getLayoutInflater();
view = inflator.inflate(R.layout.score_event_layout, parent, false);
final ViewHolder viewHolder = new ViewHolder();
viewHolder.title = (TextView) view.findViewById(R.id.title);
viewHolder.box1 = (EditText) view.findViewById(R.id.box1);
viewHolder.box2 = (EditText) view.findViewById(R.id.box2);
viewHolder.box3 = (EditText) view.findViewById(R.id.box3);
viewHolder.box4 = (EditText) view.findViewById(R.id.box4);
viewHolder.box5 = (EditText) view.findViewById(R.id.box5);
viewHolder.box6 = (EditText) view.findViewById(R.id.box6);
viewHolder.box1.addTextChangedListener(new TextWatcher()
{
public void onTextChanged(CharSequence c, int arg1, int arg2, int arg3)
{
ScoreModel score = myScoreArray.get(position);
score.box1 = Integer.valueOf(viewHolder.box1.getText().toString());
myScoreArray.set(position, score);
listView.invalidateViews();
}
public void beforeTextChanged(CharSequence c, int arg1, int arg2, int arg3){}
public void afterTextChanged(Editable arg0){}
});
view.tag(viewHolder);
return view;
当我改变Editbox 的文本时,点击它然后使用键盘输入。例如我输入9它显示9。 但是当键盘消失后,text
也不显示了。 edit text 显示空白区。
这是什么错误啊?
看起来你的代码正在使用自定义 ArrayAdapter 和 ListView 来显示一组 EditText 元素。这些 EditText 元素是在 getView 方法中创建的,并在 TextWatcher 的 onTextChanged 方法中进行了更新。
当键盘消失时,文本不会显示是因为没有将更新后的文本设置回 EditText 元素中。在 onTextChanged 方法中,你在 myScoreArray 中更新了 ScoreModel 对象的 box1 字段,但是并没有将更新后的文本设置回 EditText 元素中。
要解决这个问题,你可以在 onTextChanged 方法的末尾添加一行代码来将新的文本设置回 EditText 元素中,例如:
viewHolder.box1.setText(String.valueOf(score.box1));
这样,每当文本更改时,就会将新文本设置回 EditText 元素中,从而解决了文本不显示的问题。