Joh*_*nny 1 java android listview arraylist android-edittext
我知道有类似这样的问题,我一直在这里发布了很多代码来达到这一点,但它们都没有适用于我的适配器.我也没有使用ViewHolders像许多其他人做,因为我真的不明白他们是什么.
在我的适配器类中,我想编辑一个editText以更改其ArrayList事件对象中的相应值.但是现在改变一个事件EditText字段会改变它们,即使我使用了mobileArrayList.get(position).
public class CustomAdapter extends ArrayAdapter {
ArrayList<Event> mobileArrayList;
public CustomAdapter (Context context, ArrayList<Event> events){
    super(context, 0, events);
    this.mobileArrayList = events;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent){
    Event event = mobileArrayList.get(position);
    //ViewHolder holder;
    if(convertView == null){
        //holder = new ViewHolder();
       // holder.caption = (EditText) convertView.findViewById(R.id.events);
        convertView = LayoutInflater.from(getContext()).inflate(R.layout.listview_row, parent, false);
    } else {
        //holder = (ViewHolder) convertView.getTag();
    }
    EditText events = (EditText) convertView.findViewById(R.id.events);
    EditText start = (EditText) convertView.findViewById(R.id.start);
    EditText end = (EditText) convertView.findViewById(R.id.end);
    TextView day = (TextView) convertView.findViewById(R.id.day);
    events.setText(event.getSummary());
    start.setText("Start Date: " +event.getDateStart());
    end.setText("End Date: " + event.getDateEnd());
    day.setText(event.getDayOfTheWeek());
    /*holder.caption.setId(position);
    holder.caption.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if (!hasFocus){
                final int position = v.getId();
                final EditText events = (EditText) v;
                mobileArrayList.get(position).setSummary(events.getText().toString());
            }
        }
    });*/
    events.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        }
        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
        }
        @Override
        public void afterTextChanged(Editable s) {
            String edit = s.toString();
            mobileArrayList.get(position).setSummary(edit);
        }
    });
    return convertView;
}
class ViewHolder{
    EditText caption;
}
}
我还应该注意,一旦我在事件EditText领域工作,我也将对其他两个做同样的事情.谢谢
编辑:如果我尝试使用ViewHolders,它会在我尝试分配第一个时抛出NPE holder.events = (EditText) convertView.findViewById(R.id.events).以下是使用ViewHolders的代码:
public class CustomAdapter extends ArrayAdapter {
ArrayList<Event> mobileArrayList;
public CustomAdapter (Context context, ArrayList<Event> events){
    super(context, 0, events);
    this.mobileArrayList = events;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent){
    Event event = mobileArrayList.get(position);
    ViewHolder holder;
    if(convertView == null){
        holder = new ViewHolder();
        convertView = LayoutInflater.from(getContext()).inflate(R.layout.listview_row, parent, false);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }
    /*EditText events = (EditText) convertView.findViewById(R.id.events);
    EditText start = (EditText) convertView.findViewById(R.id.start);
    EditText end = (EditText) convertView.findViewById(R.id.end);
    TextView day = (TextView) convertView.findViewById(R.id.day);
    */
    holder.events = (EditText) convertView.findViewById(R.id.events);
    holder.start = (EditText) convertView.findViewById(R.id.start);
    holder.end = (EditText) convertView.findViewById(R.id.end);
    holder.day = (TextView) convertView.findViewById(R.id.day);
    holder.events.setText(event.getSummary());
    holder.start.setText("Start Date: " +event.getDateStart());
    holder.end.setText("End Date: " + event.getDateEnd());
    holder.day.setText(event.getDayOfTheWeek());
    /*holder.caption.setId(position);
    holder.caption.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if (!hasFocus){
                final int position = v.getId();
                final EditText events = (EditText) v;
                mobileArrayList.get(position).setSummary(events.getText().toString());
            }
        }
    });*/
    holder.events.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        }
        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
        }
        @Override
        public void afterTextChanged(Editable s) {
            String edit = s.toString();
            mobileArrayList.get(position).setSummary(edit);
        }
    });
    return convertView;
}
class ViewHolder{
    EditText events;
    EditText start;
    EditText end;
    TextView day;
}
}
| 归档时间: | 
 | 
| 查看次数: | 236 次 | 
| 最近记录: |