android自定义view的几种方式

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>
就是需要把view.xml的根布局直接换成itemView,然后在里面编写你自己的view
(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,效率要高一点。


唉,我也不知道哪个好,郁闷



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值