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;
}
}
Run Code Online (Sandbox Code Playgroud)
我还应该注意,一旦我在事件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;
}
Run Code Online (Sandbox Code Playgroud)
}
| 归档时间: |
|
| 查看次数: |
236 次 |
| 最近记录: |