convertView = LayoutInflater.from(mContext).inflate(R.layout.list_view_item, null);
XXXX = (ItemView)convertView;
假如我想自定义一个listview,我之前的做法是:
方法一:
(1)对这个listview设置一个adapter,adapter里面需要编写getview()
(2)getview里面肯定需要设置一个convertview,而这个convertview就是我们自己需要自己写的listview中的每一个itemView
(3)itemView的写法,之前是单独写一个itemView的类,继承自framelayout(当然也可以是其他的布局,我习惯用framelayout),还需要写一个布局文件view.xml,在itemView生成的时候,将view.xml加入到itemView中,
addView(LayoutInflater.from(mContext).inflate(R.layout.view, null));
(4)然后再对view中的其他元素进行调整和赋值,当然这些都是在itemView中进行的,参数是从adapter中传进来的
今天无意之中看到网上另外一种方法,虽然有些绕,但是貌似可以省去一层布局:
方法二:
(1)(2)同上
(3)同样写一个itemView,不过布局需要按照具体的形式来写,比如这个view是一个线性布局,那么这里就要继承自线性布局
(4)然后写一个view.xml
引用一个网友的话:(lei215:http://www.eoeandroid.com/thread-48681-1-1.html)
比如你 自定义一个view叫myView ,路径是,com.test.view.MyView,此view是继承LinearLayout,定义的布局文件是my_view.xml 里面内容是: <com.test.view.MyView> <xxxx /> </com.test.view.MyView> |
(5)然后在convertview的getview里面“ MyView mv = (MyView)View.inflate (context,R.layout.my_view,null);”
convertView = LayoutInflater.from(mContext).inflate(R.layout.list_view_item, null);
XXXX = (ItemView)convertView;
这种写法貌似比方法一难理解一些,因为他把inflate的过程放在了使用这个view的地方。
而且itemView.java和view.xml相当于并列的关系,还互相引用,然后交汇于使用的地方,如adapter的getview。
这种写法貌似耦合度有点高。
不过好处就是省了方法一中的一层framelayout,效率要高一点。
唉,我也不知道哪个好,郁闷