另一个视图回收问题自定义ArrayAdapter

时间:2013-07-24 10:44:56

标签: java android android-listview android-adapter

我做了很多研究,而且我和一所大学花了好几个小时试图弄清楚这个。冒着被重复关闭的风险,我无处可去!我已经为重复的ListView找到了很多解决方案,我理解了如何重复使用视图(使用convertView)等。但我似乎无法找到问题的来源。问题具有相同的典型症状,如果我在列表中的一个EditText中输入文本,那么5-6个项目下来......同样的文本就在那里!

我已经在下方添加了getView(...)代码,以帮助您帮助我,但如果您还需要其他任何内容,请告诉我们。

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    // inflator for all the views
    LayoutInflater vi = (LayoutInflater) mActivity
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    // the object where I will be getting my display data
    final Object currentItem = drawItems.get(position);

    // standard adapter/view stuff
    View v = convertView;
    ViewHolder holder = null;

    int type = getItemViewType(position);

    if (v == null) {
        holder = new ViewHolder();
        switch (type) {
        case TYPE_ROW:
            v = vi.inflate(R.layout.row_textview, null);

            // get my views
            holder.editText= (EditText) v
                    .findViewById(R.id.line_edittextview);


            break;

        case TYPE_SUMMARY:

            v = vi.inflate(R.layout.row_summary, null);

            break;
        }

        Log.i(TAG, "Convert View Tag being set: " + holder);
        v.setTag(holder);

    } else {
        Log.i(TAG,
                "Getting holder from Convert View Tag: " + v.getTag());
        holder = (ViewHolder) v.getTag();
    }

    switch (type) {

    case TYPE_ROW:

        Log.i(TAG, "Holder in use: " + holder);

        holder.editText.setText("Line " + (position + 1));

        break;

    case TYPE_SUMMARY:

        break;

    }
    return v;
}

@Override
public int getItemViewType(int position) {
    return TYPE_BETSLIP;
}

@Override
public int getViewTypeCount() {
    return 2;
}

谢谢! : - )

1 个答案:

答案 0 :(得分:0)

我会说在每一个可能的流程中处理视图。也就是说,如果您在中执行某些操作,请在其他中将其撤消。同样,在您的代码中,撤消您已完成的文本设置,如

case TYPE_ROW:
    holder.textView.setText("Line " + (position + 1));
    break; 
case TYPE_SUMMARY:
    holder.textView.setText("");
    break;

希望这有效。 其次,您正在为列表夸大2个视图。我建议您使用另一个的可见性设置为GONE左右。