0

我正在过滤一个列表视图,它工作正常。但是当我点击过滤后的列表视图的一个项目时,它会在原始位置给我项目的名称。

示例:项目:A、B、C、D、E。如果我过滤 C,它只返回 1 个项目 (C),但它显​​示 A,因为它是位置 0。

我一直在寻找信息,但没有一个类似的问题对我有帮助。

这是我的代码:

final FilteredListviewAdapter adapter = new FilteredListviewAdapter(AddAgentProfile.this, android.R.layout.simple_list_item_1, arraymls);
list.setOnItemClickListener(new OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    // TODO Auto-generated method stub
    addProfile.setMLSId(mlslist.get(position).getId());


    // THIS IS THE LINE THAT GIVES ME THE WRONG RESULT!!!
    textmls.setText(mlslist.get(position).getName());


    mls.setText("");
    dialog.dismiss();
}
});
list.setAdapter(adapter);

final EditText filter = (EditText) inflated.findViewById(R.id.et_filter);
filter.addTextChangedListener(new TextWatcher() {

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        // TODO Auto-generated method stub

    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        // TODO Auto-generated method stub

    }

    @Override
    public void afterTextChanged(Editable s) {
        adapter.getFilter().filter(s);
        adapter.notifyDataSetChanged();
    }
});

和过滤列表视图适配器:

public class FilteredListviewAdapter extends ArrayAdapter<String> {

ArrayList<String> list;

public FilteredListviewAdapter(Context context, int layout, ArrayList<String> array) {
    super(context, layout, array);
    list = array;
}

@Override
public String getItem(int position) {
    return super.getItem(position);
}

}

我做错了什么?

4

2 回答 2

1

我终于找到了解决方案。

适配器的代码在我写的时候没问题。

我唯一更改的行是在 OnItemClickListener 中,所以现在代码是这样的:

final FilteredListviewAdapter adapter = new FilteredListviewAdapter(AddAgentProfile.this, android.R.layout.simple_list_item_1, arraymls);
    list.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            // TODO Auto-generated method stub
            addProfile.setMLSId(mlslist.get(arraymls.indexOf(adapter.getItem(position))).getId());
            textmls.setText(adapter.getItem(position));
            mls.setText("");
            dialog.dismiss();
        }
});
list.setAdapter(adapter);

现在我调用函数 adapter.getItem 而不是 list.get

于 2013-07-03T14:35:15.787 回答
0

getItem应该在以下位置返回数据集中的项目:

@Override
public String getItem(int position) {
    return list.get(position);
}
于 2013-07-03T12:14:40.827 回答