填充listview会遇到麻烦

时间:2015-01-31 13:47:11

标签: java android listview android-listview adapter

我正在尝试使用自定义对象填充列表视图。我正在使用 适配器使用listview类。以下是我用来使用适配器的代码。

    adapter = new SearchListAdapter(this, values);
    expListView = (ListView) findViewById(R.id.SearchList);
    setListAdapter(adapter);

在SearchListAdapter类中,我有以下代码:

public class SearchListAdapter extends ArrayAdapter<String>
{
    private Context context;
    private ArrayList<String> values;
    public SearchListAdapter(Context context, ArrayList<String> UsernameValues) {
        super(context, R.layout.search_contact, UsernameValues);
        this.context = context;
        this.values = UsernameValues;
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent)
    {
        LayoutInflater inflater = (LayoutInflater) this.context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View rowView = inflater.inflate(R.layout.search_contact, parent, false);

        TextView textView = (TextView) rowView.findViewById(R.id.firstLine);
        for(String Index : values)
        {
            textView.setText(Index);
        }
        return rowView;
    }
}

我可以看到setListAdapter工作(我假设),因为它将信息传递给SearchListAdapter,但是当getView尝试填充列表时,它只是在每个元素中输入ArrayList中的最后一个String值在列表中。我错过了什么,所以每个元素对应一个ArrayList中的值?任何帮助表示赞赏,谢谢。

1 个答案:

答案 0 :(得分:0)

您的代码

for(String Index : values)
{
    textView.setText(Index);
}

实际上是遍历完整数据List并在每次迭代时设置每个值。因此,在最后一次迭代之后,每个textView都会留下适配器支持List中的最后一个值。

您需要的是仅设置与position列表中ListView的当前行UsernameValues对应的值。

textView.setText(values.get(position));