登录  | 立即注册

游客您好!登录后享受更多精彩

查看: 815|回复: 0

[lua教程] 【lua教程】Listview里的ChechBox

[复制链接]

444

主题

509

帖子

2051

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2051

荣誉管理论坛元老

发表于 2021-7-1 08:31:36 来自手机 | 显示全部楼层 |阅读模式 来自:
  1. require "import"
    ) T4 G0 }1 }- v1 U4 Z
  2. import "android.app.*"# L! s% v/ k3 K* X7 y0 |9 O
  3. import "android.os.*"
    6 P2 @# f* u1 K  t/ {2 _. l6 C
  4. import "android.widget.*"! b$ ~! s7 U7 b# H- Y- |- H' L$ a1 f
  5. import "android.view.*"% v  f) Q7 G# s0 S1 h, z( R
  6. layout={8 V$ k7 r1 T, L- L* d
  7.   LinearLayout,, o! E" d: K, `- `- \0 y
  8.   layout_width="fill",. h' X" Y( z: o2 ^' Y. h
  9.   layout_height="fill",
    . K1 E! U  h5 j" H5 c) W3 z
  10.   orientation="vertical",
    ; t9 h' {2 q8 g/ ^
  11.   {
      ?* m' s6 ^, q! X" B- |
  12.     LinearLayout,3 \- X, \& R6 h# @! g2 \* ]
  13.     layout_width="fill",
    0 o- E2 A$ H/ {- d7 u( x5 Y" j
  14.     layout_height="56dp",
    7 k3 p: q7 J5 h: S: A$ W
  15.     {7 P# x$ R) |5 G. }, Z* m9 a
  16.       Button,
    7 A; T2 r2 x$ m. \; X, X" ^
  17.       text="全选",3 K# a# Z/ N: K
  18.       id="btn1",
    ( b  y  c7 r* _- q0 }0 e5 S4 O& J
  19.     },
    " O& C, n7 F+ p5 t
  20.     {" {) W# P- W/ |  K1 A( F2 e
  21.       Button,
    7 [' ^4 t- }! ^3 K7 W" P
  22.       text="反选",) w5 y$ ]1 B* _# p- C/ m3 E! a
  23.       id="btn2",5 \* S- D8 r( v! k* V5 Z6 g9 M
  24.     },
    . R& L4 t" o0 H1 y# s
  25.     {
    / S/ _( C5 o- z8 y
  26.       Button,
    & u4 g% F0 l) i7 X' D" w4 M
  27.       text="打印多选数据",4 e" e4 u# g' z9 f
  28.       id="btn3",
    : S$ t9 b, o8 U; m
  29.     },
    ! P$ c5 T9 }) {& J' c7 B; T; |) S( d
  30.   },
    ) X0 T  S% L! _& q' J

  31. 8 u4 v. ]% Z8 a: E, g( j
  32. 2 r% K; F# l& O: x! x6 o
  33.   {
    & b7 N; Q5 ^5 R0 u( \
  34.     LinearLayout,
    6 S2 b; b5 y& H  b+ P& V2 o
  35.     layout_width="fill",0 S! ~2 D* W7 ?, a1 s; C8 y
  36.     layout_height="56dp",& k+ [" L  v" a- O0 M8 I
  37.     {
    " r% K; W9 I% ?$ w& g
  38.       Button,
    ; w' l7 x' _2 b' O& A
  39.       text="删除",
    ! H3 c4 u" h$ z1 q1 Y5 u& f4 h3 W
  40.       id="btn4",
    ; g( V: k" o3 c' Y# r
  41.     },+ G" v: V* y; j
  42.   },' A- j/ c' H$ b6 E
  43. 9 |2 g$ D: C( `
  44. 8 l* v0 {: M7 l7 ~4 e
  45.   {
      h9 z  c( d0 X
  46.     ListView,# b2 `1 V" T1 M
  47.     layout_width="fill",
    . ]! ?- ]) e. v0 c6 K# v
  48.     layout_height="fill",
    1 `1 h# r( g$ i
  49.     id="list",* U' y/ L- \7 ^$ L
  50.   },  w- V/ X% G' g0 |! s
  51. }
    % p# a+ Z8 z$ k$ }
  52. activity.setTheme(android.R.style.Theme_DeviceDefault_Light)--设置md主题5 U2 U* U! V; W1 x' }% |
  53. activity.setContentView(loadlayout(layout))
    6 f; M, b$ y  o5 K2 J

  54. ( u, C0 _* N1 a* d' `* b  Y

  55. ! B1 X$ v- t: S: p2 K
  56. --author:OpenEyez
    8 [/ `- X. d3 D8 p7 L$ f. ]8 X
  57. --功能:实现了ListView与复选框CheckBox的完美结合9 u6 O6 S% u! [2 v- @! P# @! n
  58. --编辑器:OpenLua+_0.5.9,Androlua5.0.7
    , P" g* h' ~7 a  S. e
  59. --欢迎大家加入openlua+QQ群:1015308783% ]  y# {) u; x4 o7 U, g3 H
  60. : S! Q6 Q$ @+ h5 W- Z9 h$ N
  61. item=- c* Y1 }8 e+ L, }+ E1 ~
  62. / B7 k# I4 o7 L0 S$ x7 i
  63. {: P; C8 a. b5 d: E/ Y
  64.   LinearLayout,6 r2 \0 }+ O# w) ^( x! I
  65.   layout_width="fill",
    4 \* i4 H! o# {; f3 R1 {
  66.   layout_height="fill",; s/ y4 I/ b$ l# E' K) K
  67.   orientation="vertical",& q1 V: H( _7 l  X
  68.   {& ~- P* w% x, v* {$ f6 J/ N
  69.     LinearLayout,% D* t" [* Q0 C: N5 |  k: U
  70.     layout_width="fill",8 k7 t( n, d7 x% j9 u
  71.     layout_height="100dp",
    " ^+ y/ A# |# l' h
  72.     {
    $ L" |- E& X. H4 M* N& X
  73.       TextView,8 s6 k* o) g# r! @% O
  74.       layout_width="80%w",% v9 d# n5 n2 y' J  M# G8 `0 D
  75.       layout_height="100dp",
    8 F" n  P( |: L1 N# s3 ~( R" t
  76.       gravity="center",( f; I* L  l9 [7 a2 a8 [& X
  77.       text="HELLOWORLD",
    5 h2 @6 a. f* @; q$ e) J
  78.       id="tv",
    , o7 T( Y" \" Z0 `' f' X
  79.     },
    ( r# G8 r( o! d8 ?+ B0 X& r$ ^0 v
  80.     {+ ]1 j5 Y2 E( l6 k7 l1 R
  81.       CheckBox,
    & x! k2 u$ I3 r1 {
  82.       layout_width="wrap_content",
    9 Y3 ~( [- j4 T9 y
  83.       layout_height="wrap_content",) k- N6 X% n' U/ d; M: h( m  J
  84.       focusable=false,
    ) \2 c* o' Y! W) ?. G
  85.       focusableInTouchMode=false,
    9 g, F) n" J8 S8 Y) J
  86.       clickable=false,0 j) \/ g5 ~7 L" o7 c; E; F
  87.       id="cb",; N9 `* @$ n6 ^# p7 a) ]# r
  88.     },8 U* R" q9 M" I( Q+ z
  89.   },
    ) g' h3 U7 a6 W) W# o6 P
  90. }
    + _: i& Z# G7 H1 s

  91.   s/ Q8 Y1 \' l! |/ y$ Q
  92. . j/ q; @  h3 V' K
  93. $ i/ J# U) A3 X
  94. --数据
    : p, k, D7 z! u) \* i- f
  95. datas={}
    3 F/ e; m' o4 a, W* _% S

  96. # d% R$ I* Z$ X/ C9 ?) F: x& Z
  97. --是否开启多选模式6 f; j) o& g( ^7 O7 T
  98. CHOICEMODE=false
    5 h! B4 J6 z0 C1 C. U, J

  99. 5 J* O% A  R& b$ h9 t) t( D9 d
  100. --适配器,要绑定数据6 C3 K! Z5 ?0 I! U1 P
  101. adp=LuaAdapter(activity,datas,item)
    ! v9 \. Y- G# |5 ^
  102. & w+ y8 h* m* D' g; X9 Q

  103. $ @2 g% Q6 s! u' N6 W- `
  104. list.setAdapter(adp)
    , I. l$ k% n. ^2 l+ ^

  105. , b  `* P9 ^3 B

  106. # P- S. W* e% D' ^3 a
  107. --增加一点数据进去
    7 |$ }* m7 c# @. {4 H( Z) {
  108. for i=1,2000 do6 f/ v+ N+ u* C
  109.   table.insert(datas,{tv="数据"..i,cb={checked=false,visibility=View.GONE}}). e) |3 `/ u- e& y
  110. end
    4 z3 S( B1 n* V' ?) x- s% d2 o' F

  111. & C/ p, ]& T4 o- ~( {8 y* w

  112.   Y# {8 \+ f4 r: i% n4 @1 l

  113. % t1 \5 p& `3 W
  114. 8 V7 v( }6 N& Q" H& B0 A
  115. --ListView的点击事件' h. _+ X- Z3 y0 D# t( ^
  116. list.setOnItemClickListener(AdapterView.OnItemClickListener{# A8 Q  ^# x6 X) {) C% X0 v. A3 k
  117.   onItemClick=function(parent,v,pos,id)
    3 i3 O' `0 |/ r% G1 P7 n! r4 h
  118.     if CHOICEMODE then5 ]- J. P  d# y% p/ t
  119.       if datas[id]["cb"]["checked"] then
    + u" n8 ^1 D: E( m; q, E
  120.         datas[id]["cb"]["checked"]=false
    & Y9 P' ]2 E7 I9 X* D4 |. }  R/ b' }
  121.        else" |$ _5 ]0 g4 @7 j
  122.         datas[id]["cb"]["checked"]=true" S8 y' J; j5 u8 R' ]: w0 z. U
  123.       end) \: ]+ P4 A6 Z
  124.       adp.notifyDataSetChanged()
    * G& y8 a8 v- @
  125.     end
    0 [$ c# L; H5 O* ^* s! F
  126.   end
    / e6 N0 u. I' d, N  b+ c+ r; U
  127. })
    - C- i" C5 Y' J8 ?+ B

  128. * T/ w8 K. P$ h) ~' B3 @0 {
  129. - V, |9 q; x5 D- Y% _3 ?
  130. , x# f# K) l) K2 A6 a" `/ v
  131. --ListView的长按事件7 S; v4 V* c6 x9 m: |
  132. list.onItemLongClick=function(l,v,p,i)( U3 M7 ~- C/ F1 ?
  133.   if CHOICEMODE==false then" E$ @% @) d6 Y6 ^! w
  134.     CHOICEMODE = true" \' {+ ?) h% [' j6 Z0 g
  135.     task(1,function(). @8 R% J8 M; T# a
  136.       for k,v ipairs(datas) do
    9 N( j& P; E! O9 A
  137.         v["cb"]["visibility"]=View.VISIBLE/ ]" m, V% p- F4 K
  138.       end# m4 P8 a3 ]  {, B8 P- B5 ^. C# k; f
  139.       adp.notifyDataSetChanged()
    / V; P. z* T  C. a4 F" z: A
  140.     end)
    ; z9 C( B* u1 ]/ ^/ w1 i
  141.     return true
    $ ?. P* S6 F- o# S
  142.    else
    - T3 I& t! `) m/ z0 X- T5 @
  143.     print("已经开启了多选模式,无需重复")5 ]0 ]7 l1 U# M% }( N
  144.     return false6 C5 }7 N5 K5 y4 r
  145.   end& p9 B7 s) l" r! X' f" F# C
  146. end
    9 h, @) y# {/ B8 _1 z% u3 ]- w) g
  147. , s# Z4 W. R% S$ }3 |! Q! E
  148. # z' B& K2 ~9 r6 b2 }- V# c/ N1 l

  149. 0 H9 W/ H( [. e6 a. W
  150. --全选0 \3 M% a5 y* O
  151. btn1.onClick=function()
      g( b% u3 o9 a
  152.   if CHOICEMODE then4 ]0 }6 C0 ]* S& s: ^4 V
  153.     task(1,function()
    9 P2 c5 a5 d* d, |9 U) a
  154.       for k,v ipairs(datas) do1 ~/ ]& g% L* E) o
  155.         v["cb"]["checked"]=true# r6 u0 Q. v1 C
  156.       end
    0 m% y' n! Y) C/ o3 \' {
  157.       adp.notifyDataSetChanged()
    , j% L3 ^" c6 i9 A- ^# q4 ~3 c( E
  158.     end)5 X2 F# L3 b/ M- K# E
  159.    else  `! D5 P3 `% P
  160.     print("未开启多选模式,长按列表开启")! F2 L7 b& N3 Z1 u
  161.   end5 D  ]/ c% U% k( W5 B& _" a* K1 y2 A/ c
  162. end
    $ D. m8 f( c( F

  163. 3 c5 P0 S9 D( U+ e1 P7 X6 c
  164. . [, c. x: q* q9 {( A5 v( v
  165. --反选
    0 a, X* x/ O* Q( ^
  166. btn2.onClick=function()8 s7 ~% O9 ^+ _5 p: U
  167.   if CHOICEMODE then
    ; A4 G0 z; W! }. ?: d' p6 d
  168.     task(1,function()3 G+ b. g1 Q" a; s. Y5 h
  169.       for k,v ipairs(datas) do/ ~" B$ ]  M% t" B9 A7 h$ ]) z; y
  170.         if v["cb"]["checked"] then
    3 N4 }# E  q1 U! d# d. s4 L
  171.           v["cb"]["checked"]=false$ [: ^: p+ k5 O' P
  172.          else
    7 P6 z2 g+ w; a) f  M
  173.           v["cb"]["checked"]=true
    ! I% m& {$ ?6 a; }* r' r
  174.         end
    . \0 f% w" r% d# Y/ I0 T3 r
  175.       end
    ( Z; m6 N- d  H$ K
  176.       adp.notifyDataSetChanged()( ?, i3 a3 A8 k! Y5 H, D% {
  177.     end)
    5 Y6 S8 d5 ^% x5 Q$ }
  178.    else+ |! q3 |: p# l5 w8 r
  179.     print("未开启多选模式,长按列表开启")" q+ l+ k. ~8 f0 h$ |: @$ c$ W
  180.   end- i* p( f% F  b1 _$ J/ s& K
  181. end
    , A. b5 I! K) r

  182. 1 z) E! x+ j: a* D

  183. 7 `6 w# [& \; p& n
  184. --打印
    $ G7 R+ Y0 i" n. Z) W
  185. btn3.onClick=function()
    . k9 U) d% g) T
  186.   if CHOICEMODE then- _3 h* l1 X) @/ t: X* Y
  187.     task(1,function(). u& I* r) D# a9 [. T
  188.       for k,v ipairs(datas) do! d# T1 j6 ]- q2 n
  189.         if v["cb"]["checked"] then
      E9 Y, @4 B7 [; D. U
  190.           print(v["tv"])
    ( U) e9 U! r, F
  191.         end  l8 v5 V' s+ ]; D- u
  192.       end
    ! Z( e2 i1 V5 t2 w  A
  193.     end)
    5 J0 s- Y* I3 d4 \
  194.    else% a" S' m$ S, d
  195.     print("未开启多选模式,长按列表开启")
    5 f: s* F/ u  ^/ n$ q
  196.   end
    2 L3 W4 J8 ?, [. u4 b  C
  197. end
    & w- f* n% K6 |9 t
  198. ' F. l1 P& O9 U' J9 j  e8 r, ^
  199. : `0 |$ E6 x- \
  200. % D" P% S5 h8 S/ Z, D" R
  201. 9 u& z& E. ?0 T7 `- W8 V
  202. function del_data()
    8 F% k2 @: c% _4 J" f( [3 \
  203.   for k,v in pairs(datas) do
    . h5 _1 q9 F3 j4 o! u
  204.     if datas[k]["cb"]["checked"]==true then
    $ t5 `& }  e* w- S2 x/ c* U& g
  205.       table.remove(datas,k)
    / V. [1 c2 Z+ V9 Y2 l7 O' w
  206.       del_data()
    & c' t0 |3 G  G; `+ s  ?& M- a
  207.       break
    $ E. w: E1 D7 \6 C/ W) f' ~
  208.     end
    7 L4 h) A5 b2 D1 G5 w+ g) E1 @
  209.   end
    , @5 I( E5 V) j2 a! {7 x& i: l
  210. end
    / H8 d" a& c8 g, h  J

  211. : S$ P% S0 T  B+ q5 V
  212. 4 Y3 ~" |6 t' y+ [( b$ _. a; D" ~8 m
  213. $ U0 |6 ]' o, o. P" v! T. E
  214. --删除数据
    ) Z. S6 B3 o7 T. b- y4 X& m% z
  215. btn4.onClick=function(); N7 B% n7 U0 c( t; g* v, T6 W
  216.   if CHOICEMODE then  r3 `9 n8 X/ H9 y- h
  217.     task(1,function()/ O1 K6 ?; Y9 Z& o) v
  218.       del_data()
    , `! K$ x: X) F, n
  219.       adp.notifyDataSetChanged()  e  o6 [8 P/ N
  220.     end)" t: F( N% x/ d1 |, m
  221.    else
    3 r7 S# {! b' h; q; r# o
  222.     print("未开启多选模式,长按列表开启")* `. [( M6 M: @9 q+ ?$ i$ g% N
  223.   end
    4 O" L, l# c9 }! C# V6 c
  224. end4 g0 ^" a4 U6 D$ f; h0 e8 x

  225. " G% Q; z" K& j+ _; g( g1 O$ h

  226. * F, F3 |. Q" D  p
  227. ! |8 l: x3 C% i. x& W

  228. ) N+ p; W2 c  C, c! F4 E2 Y  l
  229. --返回键的交互
    / o+ s( h) x* X
  230. function onKeyDown(code,event)3 O: [' l! k: f3 ?% b  f0 r% P
  231.   if string.find(tostring(event),"KEYCODE_BACK") ~= nil then
    + @0 ^+ ]' J& h% x
  232. ) m, {* `- x  [9 z6 U: @
  233.     if CHOICEMODE==true then  M( m+ \0 j, {$ x1 m' _
  234.       CHOICEMODE=false+ N0 o$ E7 d9 O1 X8 P! K
  235.       task(1,function()
    7 h' z" g' ~$ W. F9 f( {3 G
  236.         for k,v ipairs(datas) do
      T/ d4 U+ B3 D* l9 g( `# |
  237.           v["cb"]["checked"]=false  }; p+ U) o) g2 u: E9 X. U2 n* V
  238.           v["cb"]["visibility"]=View.GONE8 T9 o% _& D4 w: _# ?
  239.         end$ ?& g+ i) r1 S* W- i
  240.         adp.notifyDataSetChanged()
    4 H* P2 r! X9 ?9 c7 Z0 S
  241.       end)7 ?, t# E! y8 I: L
  242.       return true
    / L; X2 p2 N+ i+ f; k" b
  243.      else, I" _* N# _( q
  244.       return false
    # Q: N: V8 k0 d9 D# y( I
  245.     end
    7 ~& Y  \7 d( v3 [7 M3 a2 W

  246. 5 `2 K; F- w. ]! R+ z
  247.   end- l6 A) J# q) [/ z+ C
  248. end9 |1 l; P, \( r8 E

  249. $ `$ D5 r! u3 x# S* S9 h/ F

  250. ' i% E; k* z5 f) I9 v2 \
  251. ' E) z# o* k; t3 d: O5 ~. T
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|星空社区 |网站地图

GMT+8, 2024-5-2 23:13 , Processed in 0.063813 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表