0

我正在使用以下代码在列表视图中显示编辑框

我的每个 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,但是一旦键盘消失,文本就几乎消失了。编辑文本显示空白。

怎么了?

4

2 回答 2

0
  1. 使用 View holder 有什么意义,当你不重复使用convertView时,你总是在膨胀一个新的 View。

  2. 我看到了对listView.invalidateViews()in的调用getView()。这最终可能会ListView在每个文本更改上失效。在失效时,getView()被调用并且一个新TextChangedListener的被附加到EditText. 所有这样的听众都在做同样的事情 n 次,这是混乱的根源。

  3. myScoreArray此外,当您膨胀视图时,您不会将文本从保存位置 ( ) 设置回。

于 2013-03-31T06:45:25.903 回答
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 中的 EditText 是有问题的,因为它会导致 listView 项目因为软键盘而移动。要么设置清单:

android:windowSoftInputMode="adjustPan"

(我不确定这是正确的值)。或者,制作一个用于编辑所选项目的对话框。

于 2013-03-31T09:20:04.593 回答