如何在ListView的每个项目中使用AutoCompleteTextView

时间:2015-07-24 13:41:46

标签: java android xml listview autocompletetextview

我已经尝试过一段时间,但似乎无法做到这一点。我将适配器应用于对象,但是当我在视图中输入字符时,仍然没有出现。

public View getView(int position, View view, ViewGroup parent) {
    ViewHolder holder;
    if (view == null) {
        holder = new ViewHolder();

        view = mInflater.inflate(R.layout.list_item, parent, false);

        holder.nameTxt = (AutoCompleteTextView) view.findViewById(R.id.name_txt);

        String[] drinkArray = activity.getResources().getStringArray(R.array.drink_array);
        holder.adapter = new ArrayAdapter<>(activity, android.R.layout.simple_list_item_1, drinkArray);
        holder.nameTxt.setAdapter(holder.adapter);

        view.setTag(holder);
    } else {
        holder = (ViewHolder) view.getTag();
    }

    if (!itemExists(position)) return view;

    ListItem item = getItem(position);
    holder.nameTxt.setText(item.name);

    holder.nameTxt.setAdapter(holder.adapter);

    holder.nameTxt.setTag(position);

    holder.nameTxt.setOnFocusChangeListener(this);

    return view;
}

@Override
public void onFocusChange(View v, boolean hasFocus) {
    if (hasFocus) return;
    int position;
    ListItem item;
    switch (v.getId()) {
        case R.id.name_txt:
            position = (int) v.getTag();
            if (!itemExists(position)) return;
            item = getItem(position);
            AutoCompleteTextView txtView = (AutoCompleteTextView) v;
            item.name = txtView.getText().toString();
            break;
        default:
            Log.e(TAG, "Unknown onFocusChange View ID: " + v.getId());
            break;
    }
}

public class ViewHolder {
    public AutoCompleteTextView nameTxt;
    public ArrayAdapter<String> adapter;
}

public class ListItem {
    public String name;

    public ListItem() {
        name = "";
    }
}

好的,所以上面的代码是我到目前为止,这可以完美地保存和加载textview中的数据。

2 个答案:

答案 0 :(得分:0)

我认为你的getView else方法有错误。你可以试试以下 变化

holder=(viewHolder) View.getTag();

通过

holder = view;

然后出于这种类型

ViewHolder item = (ViewHolder) holder.getTag();
...

答案 1 :(得分:0)

我找到了完成这项任务的方法。我在ListView(ListView1)中放置了一个普通的TextView,然后在ListView1的顶部创建了另一个ListView(ListView2)。然后根据用户在ListView1中单击的项目,我将项目编号(位置)和用户单击的TextViewer中的文本传递给ListView2,在那里它可以设置自身的上边距并过滤其结果。设置上边距会将其移动到用户单击的TextView下。如果有人想要代码,只需评论并更新答案。