自定义列表项的自动完成视图未按预期工作

时间:2013-04-29 22:04:35

标签: android indexing autocompletetextview listitem

我想使用带有自定义下拉列表项的android自动完成文本视图(不仅包括字符串)。它以一种特殊的方式工作:它在我的arraylist中找到相应的项目,如果我点击一个项目,正确的字符串将出现在文本框中。 但是,下拉菜单不会显示正确的字符串,而是显示我的arraylist的前X个条目(其中x是num_of_results)。 例: arraylist:a,b,c,aa,ab,ac 输入文字:a 我的攻击:a,b,c,aa(注意攻击次数是否正确) 如果我点击b,textview得到aa(第二个结果)

我猜,我的适配器或customAutoComplete类有问题。这是我的CustomAutoCompleteView类。

public class CustomAutoCompleteView extends AutoCompleteTextView {


public CustomAutoCompleteView(Context context) {
    super(context);
}

public CustomAutoCompleteView(Context context, AttributeSet attrs) {
    super(context, attrs);
}

public CustomAutoCompleteView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
}

@Override
public boolean enoughToFilter() { 
    return true;
}



protected void onFocusChanged (boolean focused, int direction, Rect previouslyFocusedRect) 
{
    if(focused)
        performFiltering("", 0);
    super.onFocusChanged(focused, direction, previouslyFocusedRect);
}

这是我的listadapter:

public class ListAdapter extends ArrayAdapter<StopData> {

public ListAdapter(Context context, int textViewResourceId) {
    super(context, textViewResourceId);
    // TODO Auto-generated constructor stub
}

private List<StopData> stops;

public ListAdapter(Context context, int resource, List<StopData> stops) {

    super(context, resource, stops);

    this.stops = stops;

}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    View v = convertView;

    if (v == null) {

        LayoutInflater vi;
        vi = LayoutInflater.from(getContext());
        v = vi.inflate(R.layout.megalloelem, null);

    }

    StopData p = stops.get(position);

    if (p != null) {

        TextView stopname = (TextView) v.findViewById(R.id.megallo);

        if (stopname != null) {
            stopname.setText(p.name);
        }
    }

    return v;

}

getView函数已经得到了&#34;错误&#34;索引,所以问题不是(仅)那里。 任何想法如何从原始arraylist获取结果的索引? 真诚的,paland3

1 个答案:

答案 0 :(得分:1)

使用

StopData p = getItem(position);

而不是

StopData p = stops.get(position);

这是因为适配器处理过滤,它将返回正确的项目。