Android 如何在自定义ListView中添加TextChangeListener?
我创建了一个自定义的Android 如何在自定义ListView中添加TextChangeListener?,android,listview,android-edittext,Android,Listview,Android Edittext,我创建了一个自定义的列表视图,它的每一行都包含一个文本视图和一个编辑文本。一切都很正常,但我不知道应该在哪里将textchangelister设置为EditText,以便设置/保存输入的值。这是我的密码: RowItem.java public class RowItem { private String title; private String value; public RowItem(String title, String value) {
列表视图
,它的每一行都包含一个文本视图
和一个编辑文本
。一切都很正常,但我不知道应该在哪里将textchangelister
设置为EditText
,以便设置/保存输入的值。这是我的密码:
RowItem.java
public class RowItem {
private String title;
private String value;
public RowItem(String title, String value) {
this.title = title;
this.value = value;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
CustomList.java
public class CustomList extends ArrayAdapter<RowItem> {
Context context;
List<RowItem> items;
public CustomList(Context context, int resourceId,
List<RowItem> items) {
super(context, resourceId, items);
this.context = context;
this.items = items;
}
/*private view holder class*/
private class ViewHolder {
TextView txtTitle;
EditText txtValue;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
RowItem rowItem = getItem(position);
LayoutInflater mInflater = (LayoutInflater) context
.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
if (convertView == null) {
convertView = mInflater.inflate(R.layout.row_item, null);
holder = new ViewHolder();
holder.txtTitle = (TextView) convertView.findViewById(R.id.textView1);
holder.txtValue = (EditText) convertView.findViewById(R.id.editText1);
convertView.setTag(holder);
} else
holder = (ViewHolder) convertView.getTag();
holder.txtTitle.setText(rowItem.getTitle());
holder.txtValue.setText(rowItem.getValue());
return convertView;
}
}
公共类CustomList扩展了ArrayAdapter{
语境;
清单项目;
公共自定义列表(上下文,int-resourceId,
(列表项目){
超级(上下文、资源ID、项目);
this.context=上下文;
这个项目=项目;
}
/*私有视图持有者类*/
私有类视窗持有者{
TextView-txtTitle;
编辑文本txtValue;
}
公共视图getView(int位置、视图转换视图、视图组父视图){
ViewHolder=null;
RowItem RowItem=getItem(位置);
LayoutInflater mInflater=(LayoutInflater)上下文
.getSystemService(活动.布局\充气机\服务);
if(convertView==null){
convertView=mInflater.充气(R.layout.row_项,空);
holder=新的ViewHolder();
holder.txtTitle=(TextView)convertView.findViewById(R.id.textView1);
holder.txtValue=(EditText)convertView.findViewById(R.id.editText1);
convertView.setTag(支架);
}否则
holder=(ViewHolder)convertView.getTag();
holder.txtitle.setText(rowItem.getTitle());
holder.txtValue.setText(rowItem.getValue());
返回视图;
}
}
有什么建议吗?修改您的viewHolder,使其包含所指向行的行号
private class ViewHolder {
TextView txtTitle;
EditText txtValue;
int rowNumber;
}
始终设置行数
holder.txtValue.setText(rowItem.getValue());
holder.rowNumber = position;
将自定义适配器添加为editText上的onFocusListener,并使用以下代码编辑行号
void onFocusChanged(View v, boolean hasFocus) {
ViewHolder holder = (ViewHolder)v.getParentView().getTag();
int rowNo = holder.rowNumber;
//do rest of the stuff like modifying the array list.
}
但是,我确实认为应该有一个比这个更简单的解决方案。您能详细介绍一下onFocusChanged吗?setOnFocusListener和View.OnFocusListener处理焦点的开始和结束,就像Javascript一样。编辑文本完成编辑后,将调用onFocusChanged。