ListView Scroll上的EditText内容更改

时间:2012-05-25 13:49:31

标签: android android-layout android-widget

我有一个带有定制适配器的Android应用程序,它扩展了Cursor Adapter。
我覆盖了CursorAdapter的bindView和newview方法。我的每个ListView行都包含一个EditText。当我在EditText中输入一些文本并向下滚动ListView时,EditText文本的内容将被移动到另一个EditText。
任何人都可以帮我解决这个问题,以防止当ListView向下滚动时EditText重用其内容。


在此先感谢,

这是代码:

        private class AddScreenArrayAdapter extends ArrayAdapter<AddScreenItems>{

  ViewHolder viewHolder = null;
  public String[] holder_values;

public AddScreenArrayAdapter(Context context, int textViewResourceId,
        List<AddScreenItems> objects) {
    super(context, textViewResourceId, objects);
    holder_values = new String[objects.size()];

    // TODO Auto-generated constructor stub
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub

    View v = convertView;
    if (v == null) {
        LayoutInflater vi = (LayoutInflater)getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v = vi.inflate(R.layout.additem_row, null);
        viewHolder = new ViewHolder();
        viewHolder.label = (TextView) v.findViewById(R.id.label_add_item);
        viewHolder.dbName=(TextView)v.findViewById(R.id.dbtable_name);
        viewHolder.value = (EditText) v.findViewById(R.id.value_add_item);
        viewHolder.value.addTextChangedListener(new TextWatcher()
        {

            @Override
            public void afterTextChanged(Editable arg0) {
                // TODO Auto-generated method stub
                holder_values[viewHolder.ref]= arg0.toString();

            }

            @Override
            public void beforeTextChanged(CharSequence s, int start,
                    int count, int after) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onTextChanged(CharSequence s, int start,
                    int before, int count) {
                // TODO Auto-generated method stub

            }

        });
        v.setTag(viewHolder);
    }
    else{
        viewHolder = (ViewHolder) v.getTag();
    }
    AddScreenItems addScreenItems = addScreenItemsList.get(position);
    if(addScreenItems!=null)
    {
        viewHolder.label.setText(addScreenItems.labelname);
        viewHolder.dbName.setText(addScreenItems.databaseTableName);
    //  viewHolder.ref = position;
        if (holder_values[position] != null) 
         { 
            viewHolder.value.setText(holder_values[position]); 
        } 

         else { 
             viewHolder.value.setText(""); 
         }


    }
    return v;


}

    }

             static class ViewHolder {
    public TextView label;
    public EditText value;
    public TextView dbName;
    int ref;
        }

1 个答案:

答案 0 :(得分:0)

如果你在滚动后遇到问题那就是视图回收会让你感到烦恼。你基本上需要设置一个数组来保存EditTexts的内容,所以当你滚动时它们不会搞砸。

这是我在类似主题上给出的另一个答案的链接。它应该为你指明方向。 SO Answer

修改

当用户在EditText框中完成一个条目时,我使用setOnFocusChangeListener来运行代码。

qty.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
    if (!hasFocus) {
        LinearLayout parent = (LinearLayout) v.getParent();
        EditText qtyTemp = (EditText) parent.findViewById(R.id.qty);
        quantity[pos] = qtyTemp.getText().toString();
    }
}
});