Android中的getView发生了奇怪的问题

时间:2015-01-14 20:09:50

标签: android

我调用Web服务并将JSON响应解析为名为venueList的对象

一些返回的场地是'特色',这意味着在列表视图中,它们有不同的背景,可以从非特色场地中脱颖而出。

获取数据后,我遍历数据,将特色项目放在顶部,然后添加非特色场所。

按照我想要的方式对数据进行排序后,我使用自定义的ArrayAdapter,如下所示:

ArrayAdapter<Listing> customerAdapter = 
    new ArrayAdapter<Listing>(ViewHappyHoursListingsActivity.this, 
    R.layout.list_item, R.id.name, venueListsWithFeaturedAtBeginning) {
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = super.getView(position, convertView, parent);

        TextView listingID = (TextView)view.findViewById(R.id.listingID);
        TextView name = (TextView)view.findViewById(R.id.name);
        TextView location = (TextView)view.findViewById(R.id.location);
        TextView runningTime = (TextView)view.findViewById(R.id.runningtime);
        TextView distance = (TextView)view.findViewById(R.id.distance);

        // Change UI if this listing is a featured one
        if(getItem(position).featured)
        {
            name.setText(getItem(position).venueName);
            Log.d("Setting textview to black in position:", String.valueOf(position));
            name.setBackgroundResource(R.color.black);
        }
        else
        {
            name.setText(getItem(position).venueName);
        }

        listingID.setText("" + getItem(position).listingID);
        location.setText(getItem(position).venueLocation);
        runningTime.setText(getItem(position).runningTime);
        distance.setText(getItem(position).distanceForUI);

        return view;
    }
};
setListAdapter(customerAdapter);

根据场地列表中的数据,只有前两个项目应该具有黑色背景。列表视图中有8个项目,第一个和第二个项目具有预期的黑色背景,但第六个和第七个项目也是如此

输出如下:

ListItem1: Black background
ListItem2: Black background
ListItem3: White background
ListItem4: White background
ListItem5: White background
ListItem6: Black background
ListItem7: Black background
ListItem8: White background

Log.d()行输出

D /将名称textview设置为位置:: 0的黑色 D /将名称textview设置为位置为黑色:: 1

,别无其他。

有谁知道为什么会发生这种行为?

1 个答案:

答案 0 :(得分:0)

视图正在被回收(即第6和第7项重用与1和2相同的convertView),因此您需要从不需要它的视图中删除背景。添加

name.setBackgroundResource(0);

到您的else分支。