Android ArrayAdapter无法预测地使行呈现不同的颜色

时间:2013-10-01 05:06:26

标签: android listview

我有一个ListView适配器,可以将自定义类放入listview。自定义类很简单,它是一个NameValue,只有两个字符串(一个用于名称,另一个用于值)。如果名称是Key,我想为行使用一个XML布局;如果是其他任何内容,请使用其他XML布局。这是我的适配器的代码:

private class ApInfoAdapter extends ArrayAdapter<NameValue> {
    private ArrayList<NameValue> adapterPairs;

    public ApInfoAdapter(Context context, int textViewResourceId,
            ArrayList<NameValue> pairs) {
        super(context, textViewResourceId, pairs);
        this.adapterPairs = pairs;
    }

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

        View v = convertView;
        adapterPair = adapterPairs.get(position);

        if (v == null) {
            LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            if (adapterPair.name.equals("Key")) {
                v = vi.inflate(R.layout.info_row_key, null); // This makes the key red
            } else {
                v = vi.inflate(R.layout.info_row, null); // All others have use the default foreground color 
            }
        }

        if (adapterPair != null) {
            TextView name = (TextView) v.findViewById(R.id.name);
            TextView value = (TextView) v.findViewById(R.id.value);
            name.setText(adapterPair.name);
            value.setText(adapterPair.value);

        }

        return v;
    }
}

问题在于,有时它会为名称为“Key”红色的行创建值,但有时会使其他行的值变为红色(有时是一行,有时是多行)。当颜色关闭时,我注意到当我向上和向下滚动ListView时,其他行也会被错误地着色。我也注意到我的三星Galaxy S2上的问题比我的Nexus 7 Razor更糟。我对专家的问题是:我做错了什么,我该如何解决?感谢您的见解。

1 个答案:

答案 0 :(得分:1)

如果v不是null,则应手动设置背景,因为它可以是View,而不仅仅是{{1}}。