簡體   English   中英

在ListView中編輯文本的奇怪行為

[英]Edit Text strange behavior in ListView

我正在使用以下代碼在列表視圖中顯示編輯框

我的每個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,但是一旦鍵盤消失,該文本幾乎消失了。 編輯文本顯示空白。

怎么了?

  1. 使用View持有者的意義在於,當您不重新使用convertView ,總是會膨脹一個新View。

  2. 我在getView()看到對listView.invalidateViews()的調用。 這可能導致ListView在每次文本更改時都失效。 無效時,將調用getView() ,並將新的TextChangedListener附加到EditText 所有這些偵聽器都在做n次相同的事情,這是造成混亂的秘訣。

  3. 另外,在膨脹視圖時,也不會從保存文本的位置( myScoreArray )重新設置文本。

那不是您使用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有問題,因為由於softKeyboard,它導致listView項移動。 設置清單:

android:windowSoftInputMode="adjustPan"

(我不確定這是正確的值)。 或者,創建一個對話框來編輯所選項目。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM