1. 程式人生 > >怎樣給listview的item中的子控制元件設定監聽及時時重新整理

怎樣給listview的item中的子控制元件設定監聽及時時重新整理

       listView現在應該還受到眾多的程式設計師青睞,雖然android5.0以後已經新出了recyclerView,功能更加強大,但是listView已經被開發的特別成熟,而recyclerView卻很少能獲取到公司的青睞(可能很多人還不知道這個控制元件)。本文就從listView子控制元件的設定監聽和時時更新出發,教大家如何進行操作。

一、要達到的效果:


當點選加減號時,需要中間顯示數字的文字隨之發生改變。

二、主要步驟:

       該效果的主要實現有一個難點,就是當你點選某一個item的加減號的時候,系統是如何知道哪一個文字地數字需要更新呢?因為每一個item的每一個控制元件的id都是一樣的,對吧。這樣就需要一個變數來區別開每一個item的控制元件了。adapter中的部分程式碼如下:


這邊是adapter中的一部分程式碼,和以往不同的是,當你對adapter進行new的時候,需要再將listView傳遞過去,下文中對文字地區分需要用到,是特別重要的一點。

繼續往下看程式碼:


這裡是adapter中的getView方法的重寫,不相關的程式碼我已經註釋掉了,大家只需要看未被註釋的程式碼即可。74行的程式碼大家注意一下,這一行主要是對每一個不同的item中的顯示數字的文字,通過setTag並將自身的position進行封裝來達到區分的。在下文中會通過listview的方法來進行提取,那麼如何區分呢?77行和78行大家注意一下是針對加減號的一個監聽設定,這邊是通過一個內部類InnerCartListener繼承OnClickListener來進行監聽設定。並且在new的時候需要傳遞一個引數position來在內部監聽類中,這個position是不是就直接傳遞給了InnerCartListener了呢?通過這個傳遞過去的position就可以進行區分了唄!不多說,看下面的程式碼:


上面的程式碼就是adapter中的繼承View.OnClickListener的全部程式碼,也是區分item子控制元件的重點程式碼了。類的內部設定了一個引數的構造方法,通過每一個加減號建立監聽來傳遞過來position,然後對監聽類的position賦值。當點選加減號時,通過listView的findViewWithTag方法以及position來提取到textview。這邊注意在getView方法中是通過setTag方法來進行封裝的,所以這邊就需要通過listView的findViewWithTag()方法。提取出來的textView就可以通過點選iv_cart_add和iv_cart_sub來對textview的文字進行重新整理了。