android自定義view的幾種方式
阿新 • • 發佈:2019-01-25
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,效率要高一點。
唉,我也不知道哪個好,鬱悶