我使用以下代码在列表视图中显示编辑框
我的每个ListView项目都包含以下模式
[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但是一旦键盘消失,文本就会消失。编辑文本显示空白。
有什么问题?
答案 0 :(得分:0)
使用View持有人有什么意义,当您不重复使用convertView
时,您总是在膨胀一个新视图。
我在listView.invalidateViews()
看到了getView()
的来电。这可能会导致ListView
在每次文本更改时失效。在无效后,系统会调用getView()
并将新TextChangedListener
附加到EditText
。所有这些听众都在做同样的事情n次,这是混乱的秘诀。
此外,在向视图进行充气时,您不会从保存位置(myScoreArray
)设置文本。
答案 1 :(得分:0)
这不是您使用ViewHolder的方式。这就是你应该如何使用它:
public View getView(...)
{
View rootView=convertView;
ViewHolder holder;
if(rootView==null)
{
rootView=inflater....
rootView.setTag(holder =new ViewHolder());
//...
}
else holder=(ViewHolder) rootView.getTag();
//...
}
listView中的android:windowSoftInputMode="adjustPan"
(我不确定这是正确的值)。或者,创建一个用于编辑所选项目的对话框。