BaseAdapter getView为单个位置提供多个convertview对象

时间:2016-02-09 21:23:57

标签: java android listview baseadapter

我在滑动标签视图中的片段内部有一个ListView。我为listview创建了一个自定义适配器,扩展了BaseAdapter。问题是,当我调用notifyDataSetChanged() getView时,会调用几次(OK),但只有在最后一次调用时,convertView参数才有效。在前几次调用中,它提供了一个有效的(非null)视图对象,但它不是实际显示的视图。我知道这是真的,因为无效convertViews的更新不会显示在屏幕上。 SensorViewHolder是私有静态视图者类。我知道适配器只有一个实例,因为适配器对象的ID没有改变,这也意味着我可以确定滑动选项卡视图中只有一个片段。这是一个问题的原因是因为一旦我使用此适配器的多个列表项,setBackground()不再有效,即使其他项(一些TextViews)能够设置其文本没有任何问题。

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    Log.d(TAG, "View updating...");
    View vi = convertView;
    SensorViewHolder holder;
    if (convertView == null) {
        holder = new SensorViewHolder();
        vi = inflater.inflate(R.layout.tab_sensor, null);
        holder.name = (TextView) vi.findViewById(R.id.tab_sensor_name);
        holder.weight = (TextView) vi.findViewById(R.id.tab_sensor_weight);
        holder.unit = (TextView) vi.findViewById(R.id.tab_sensor_unit);
        holder.selectionLayout = (RelativeLayout) vi.findViewById(R.id.tab_sensor_selection);
        holder.onSelectListener = new OnSelectListener(position);
        holder.selectionLayout.setOnTouchListener(holder.onSelectListener);
    } else
        holder =(SensorViewHolder) vi.getTag();
    vi.setTag(holder);
    if (prevSelected != selected) {
            if (position == selected)
                holder.selectionLayout.setBackground(bgSelected);
            else
                holder.selectionLayout.setBackground(bgUnselected);
    }
    if (position == getCount() - 1)
            prevSelected = selected;
    // update rest of components
    return vi;
}
编辑:我对此进行了更多调查,发现无效视图无效且脏。为什么getView()会给我脏的,无效的观点?

0 个答案:

没有答案