大家晚上好, 我的计划是,获取已由listview填充的已更改editText的值。到目前为止,我可以通过适配器中的addTextChangedListener函数看到更改的值,但我不知道如何将值返回给主类。 这是我的适配器类:
import android.app.Activity;
import android.text.TextWatcher;
import android.text.Editable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.TextView;
import com.hobbyathletes.hobbyathletes.R;
public class EventRefAdapter extends ArrayAdapter<String> {
private final Activity context;
private final String[] string_myeventref;
private final String[] string_myeventref_value;
public EventRefAdapter(Activity context, String[] string_myeventref, String[] string_myeventref_value) {
super(context, R.layout.list_item_myeventref, string_myeventref);
this.context = context;
this.string_myeventref = string_myeventref;
this.string_myeventref_value = string_myeventref_value;
}
@Override
public View getView(int position, View view, ViewGroup parent) {
final ViewHolder holder;
if (view == null) {
holder = new ViewHolder();
LayoutInflater inflater = context.getLayoutInflater();
view = inflater.inflate(R.layout.list_item_myeventref, null, true);
holder.txtname = (TextView) view.findViewById(R.id.textView_myeventref_name);
holder.edtxtvalue = (EditText) view.findViewById(R.id.editText_myeventref_value);
view.setTag(holder);
} else {
holder = (ViewHolder) view.getTag();
}
holder.ref = position;
holder.txtname.setText(string_myeventref[position]);
holder.edtxtvalue.setText(string_myeventref_value[position]);
holder.edtxtvalue.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
// TODO Auto-generated method stub
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable arg0) {
// TODO Auto-generated method stub
string_myeventref_value[holder.ref] = arg0.toString();
System.out.println("Text changed: " + arg0.toString());
}
});
return view;
}
private class ViewHolder {
TextView txtname;
EditText edtxtvalue;
int ref;
}
}
在我的主要课程中,我这样称呼它:
String[] string_myeventref = new String[] {"My Startnumber:", "Total Distance:", "Total Time:"};
String[] string_myeventref_value = new String[] {mER.getBib(), mER.getTotald(), mER.getTotalt()};
adapter = new EventRefAdapter(myeventref.this, string_myeventref, string_myeventref_value);
list=(ListView)findViewById(R.id.listView_eventref);
list.setAdapter(adapter);
所以我的最终目标是,重新填充mER对象,以及原始对象的副本;) 同样不错的是,在editText字段被保留之后获取值的一种方法,但我认为如果我写每个更改或只是完整的更改,这并不重要。
谢谢md
更新: 我将我的适配器类更改为此类似乎现在可以工作,必须检查它:
public View getView(int position, View view, ViewGroup parent) {
View rowView = view;
ViewHolder holder = null;
final myeventref.MyEventRefRow item = elements.get(position);
if (rowView == null) {
//LayoutInflater inflater = context.getLayoutInflater();
rowView = context.getLayoutInflater().inflate(layoutResourceId, null, true);
holder = new ViewHolder();
holder.txtname = (TextView) rowView.findViewById(R.id.textView_myeventref_name);
holder.edtxtvalue = (EditText) rowView.findViewById(R.id.editText_myeventref_value);
rowView.setTag(holder);
} else {
holder = (ViewHolder) rowView.getTag();
}
if (holder.textWatcher != null) {
holder.edtxtvalue.removeTextChangedListener(holder.textWatcher);
}
holder.textWatcher = 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) {
item.setValue(s.toString());
}
@Override
public void afterTextChanged(Editable s) {
}
};
holder.edtxtvalue.addTextChangedListener(holder.textWatcher);
holder.txtname.setText(item.getName());
holder.edtxtvalue.setText(item.getValue());
return rowView;
}
答案 0 :(得分:0)
执行此操作的一种简单方法是让您的活动使用void fieldUpdated(int position, String value)
等方法实现接口。然后,在afterTextChanged()
中,您可以执行此操作:
((MyInterface)context).fieldUpdated(holder.red, arg0.toString());
(请注意,在main活动中执行fieldUpdated
需要引用要更新的String数组,因此您可能希望将它们作为类的成员变量。)
这是一个非常简单的实现,称为observer pattern。