首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >ListView的回收机制是如何工作的

ListView的回收机制是如何工作的
EN

Stack Overflow用户
提问于 2012-08-14 11:54:56
回答 3查看 81.6K关注 0票数 152

所以我之前遇到了这个问题,很自然地,我在here上寻求帮助。Luksprog的回答很棒,因为我不知道ListView和GridView是如何使用回收视图优化自己的。因此,在他的建议下,我能够改变向GridView添加视图的方式。问题是,现在我有一些不合理的东西。这是来自我的BaseAdaptergetView

public View getView(int position, View convertView, ViewGroup parent) {
        if(convertView == null) {
            LayoutInflater inflater = LayoutInflater.from(parent.getContext());
            convertView = inflater.inflate(R.layout.day_view_item, parent, false);
        }
        Log.d("DayViewActivity", "Position is: "+position);
        ((TextView)convertView.findViewById(R.id.day_hour_side)).setText(array[position]);
        LinearLayout layout = (LinearLayout)convertView.findViewById(R.id.day_event_layout);

        //layout.addView(new EventFrame(parent.getContext()));

        TextView create = new TextView(DayViewActivity.this);
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(0, (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 62, getResources().getDisplayMetrics()), 1.0f);
        params.topMargin = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 1, getResources().getDisplayMetrics());
        params.bottomMargin = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 1, getResources().getDisplayMetrics());
        create.setLayoutParams(params);
        create.setBackgroundColor(Color.BLUE);
        create.setText("Test"); 
        //the following is my original LinearLayout.LayoutParams for correctly setting the TextView Height
        //new LinearLayout.LayoutParams(0, (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 60, getResources().getDisplayMetrics()), 1.0f)   
        if(position == 0) {
            Log.d("DayViewActivity", "This should only be running when position is 0. The position is: "+position);
            layout.addView(create);
        }

        return convertView;
    }

}

问题是当我滚动时,这种情况发生了,而不是在位置0上...看起来像是位置6和位置8,加上位置8中的两个。现在我仍然在尝试使用ListView和GridView的诀窍,所以我不明白为什么会发生这种情况。我提出这个问题的一个主要原因是为了帮助那些可能不知道ListView和GridView的循环视图,或者这个article所说的ScrapView机制的人。

稍后编辑

添加链接到google IO talk,这基本上就是理解ListView工作原理所需的全部内容。Link在评论中死了。所以user3427079很友好地更新了这个链接。Here它是为了方便访问。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11945563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档