首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在创建自己的自定义适配器时,getView()方法是如何工作的?

在创建自己的自定义适配器时,getView()方法是如何工作的?
EN

Stack Overflow用户
提问于 2012-04-12 16:38:20
回答 9查看 127.8K关注 0票数 106

我的问题是:

LayoutInflater?

  • Why的作用到底是什么?我读过的所有文章都要先检查
  1. 是否为空?当它为null时是什么意思,当它不是null时是什么意思?
  2. 此方法接受的父参数是什么?
EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2012-04-12 16:52:24

1:LayoutInflater获取您的布局XML文件,并根据其内容创建不同的视图对象。

2:适配器是为重用视图而构建的,当滚动视图使其不再可见时,它可以用于出现的新视图之一。这个重用的视图就是convertView。如果这是null,这意味着没有回收的视图,我们必须创建一个新的视图,否则我们应该使用它来避免创建新的视图。

3:提供了parent,以便您可以将视图扩展为适当的布局参数。

所有这些都可以用来有效地创建将出现在列表中的视图(或使用适配器的其他视图):

public View getView(int position, @Nullable View convertView, ViewGroup parent){
    if (convertView == null) {
        //We must create a View:
        convertView = inflater.inflate(R.layout.my_list_item, parent, false);
    }
    //Here we can do changes to the convertView, such as set a text on a TextView 
    //or an image on an ImageView.
    return convertView;
}

注意LayoutInflater的使用,parent可以用作它的参数,以及convertView是如何重用的。

票数 119
EN

Stack Overflow用户

发布于 2012-04-12 16:56:57

适配器中的getView()方法用于生成ListViewGallery、...

  1. 用于获取您在布局RelativeLayout)
  2. convertView中定义的视图对象(根对象,通常是用于回收的LinearLayoutFrameLayout或xml。假设您有一个列表视图,它一次只能显示10个项目,当前显示的是item 1 -> item 10。当您向下滚动一个项目时,item 1将不在屏幕上,而item 11将显示出来。要为项目11生成视图,将调用getView()方法,这里的convertView是项目1的视图(不再需要)。所以要为项目11创建一个新的视图对象(代价很高),为什么不重用convertView呢?我们只需检查convertView是否为空,如果为空则创建新视图,否则重用=>是convertView或ListView ...它包含getView()生成的项的视图。

注意:您不能直接调用此方法,只需实现它来告诉父视图如何生成项目的视图。

票数 72
EN

Stack Overflow用户

发布于 2012-04-12 16:42:55

你可以看看这段关于列表视图的视频。它来自去年的Google IO,在我的脑海中仍然是列表视图中最好的漫游。

http://www.youtube.com/watch?v=wDBM6wVEO70

  1. 它将布局( res/layout/文件夹上的xml文件)膨胀为java对象,如LinearLayout和其他视图。
  2. 查看视频,将使您了解转换视图的最新用途,基本上它是一个等待您重新使用的循环视图,以避免创建新对象和减慢列表滚动速度。
  3. 允许您从适配器引用您的列表视图。
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10120119

复制
相关文章

相似问题

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