Android 可扩展listview-禁用视图循环

Android 可扩展listview-禁用视图循环,android,expandablelistview,recycle,Android,Expandablelistview,Recycle,我在Android中使用可扩展的listview,由于Android的回收政策,在子项中的交互式编辑文本方面存在巨大问题 我想知道我是否可以以某种方式禁用这种回收(不会有太多的元素,所以性能不应该是一个问题) 问题是EditText中存在重复项,即如果我在first EditText中键入某些内容,则可能在其他EditText中出现相同的文本,或者如果我折叠并展开一个组,EditText中的字符串通常会混淆 我的代码如下: 编辑: @Override public View getChildVi

我在Android中使用可扩展的listview,由于Android的回收政策,在子项中的交互式编辑文本方面存在巨大问题

我想知道我是否可以以某种方式禁用这种回收(不会有太多的元素,所以性能不应该是一个问题)

问题是EditText中存在重复项,即如果我在first EditText中键入某些内容,则可能在其他EditText中出现相同的文本,或者如果我折叠并展开一个组,EditText中的字符串通常会混淆

我的代码如下:

编辑:

@Override
public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
ChildItem item = getChild(groupPosition, childPosition);
    String comment = "";
    state = getStatelist().get(groupPosition);

    if (convertView == null) {
        holder = new ChildHolder();           
        convertView = inflater.inflate(R.layout.childitem_list_item, parent, false);
        holder.title = (EditText) convertView.findViewById(R.id.textTitle);          
        convertView.setTag(holder);
    } else {
        holder = (ChildHolder) convertView.getTag();
    }

    if(state.commentList != null){
        holder.title.setText(state.commentList[childPosition]);
    }
    else{
        holder.title.setText("");
    }

    holder.title.addTextChangedListener(new TextWatcher() {
        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            state = getStatelist().get(groupPosition);

            state.commentList[childPosition] = s.toString();                

        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        }

        @Override
        public void afterTextChanged(Editable s) {
        }
    });
}


public class States {

  public String code = "";
  public String name = "";
  public String[] commentList;
 }

你有两个不同的问题。您需要的是在每次重建中清除EditText的值。所以你可以改变

  if(state.commentList != null){
        holder.title.setText(state.commentList[childPosition]);
    }
    else{
        holder.title.setText("");
    }
进入

现在,如果您真正想要的是删除视图循环,只需使convertview始终重新充气即可

state = getStatelist().get(groupPosition);
holder = new ChildHolder();           
convertView = inflater.inflate(R.layout.childitem_list_item, parent, false);
holder.title = (EditText) convertView.findViewById(R.id.textTitle);          
convertView.setTag(holder);
holder = (ChildHolder) convertView.getTag();
// You can remove the viewholder pattern because you're not using it anymore
if(state.commentList != null){

简单地忽略非空的convertView(每次构建行视图)不起作用?不幸的是,它不起作用;由于我使用的是EditText,当我不使用viewHolder模式时,会出现重复条目。如果正确设置数据,我看不出会出现重复条目。我刚才说的只是convertView,而不是ViewHolder模式。@Luksprog请检查我编辑的问题。如果要编辑文本字段,请不要使用ListView。改用线性布局。就这么简单。有趣的是,每次放大视图似乎都有效,但现在我必须触摸编辑文本两次,直到它获得焦点。为什么?我没有足够的信息来回答这个问题。如果每次我简单地放大视图,当我点击其中一个编辑文本时,光标会出现一小段时间,然后键盘就会出现,编辑文本就会失去焦点。然后我必须再次触摸EditText来输入内容。我不知道你的布局、活动/片段或触摸/EditText侦听器如何,也无法从行为描述中推断出来。我的布局没有任何有趣的内容,只是常规设置,没有“安卓:BeforeDescents”之类的内容,唯一的EditText侦听器是我在问题中发布的侦听器(addTextChangeListener)。
state = getStatelist().get(groupPosition);
holder = new ChildHolder();           
convertView = inflater.inflate(R.layout.childitem_list_item, parent, false);
holder.title = (EditText) convertView.findViewById(R.id.textTitle);          
convertView.setTag(holder);
holder = (ChildHolder) convertView.getTag();
// You can remove the viewholder pattern because you're not using it anymore
if(state.commentList != null){