āĻāĻ•āϟāĻŋ āĻ—āϤāĻŋāĻļā§€āϞ āϤāĻžāϞāĻŋāĻ•āĻž āĻ•āĻžāĻ¸ā§āϟāĻŽāĻžāχāϜ āĻ•āϰ⧁āύ āĻ…ā§āϝāĻžāĻ¨ā§āĻĄā§āϰāϝāĻŧ⧇āĻĄ āĻœā§‡āϟāĻĒā§āϝāĻžāϕ⧇āϰ āĻ…āĻ‚āĻļāĨ¤

āϰāϚāύāĻž āĻĒāĻĻā§āϧāϤāĻŋ āĻšā§‡āĻˇā§āϟāĻž āĻ•āϰ⧁āύ
āĻœā§‡āϟāĻĒā§āϝāĻžāĻ• āĻ•āĻŽā§āĻĒā§‹āϜ āĻšāϞ Android āĻāϰ āϜāĻ¨ā§āϝ āĻĒā§āϰāĻ¸ā§āϤāĻžāĻŦāĻŋāϤ UI āϟ⧁āϞāĻ•āĻŋāϟāĨ¤ āĻ•āĻŽā§āĻĒā§‹āĻœā§‡ āϞ⧇āφāωāĻŸā§‡āϰ āϏāĻžāĻĨ⧇ āϕ⧀āĻ­āĻžāĻŦ⧇ āĻ•āĻžāϜ āĻ•āϰāĻŦ⧇āύ āϤāĻž āĻļāĻŋāϖ⧁āύāĨ¤

āφāĻĒāύāĻŋ āφāĻĒāύāĻžāϰ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āϚāĻžāĻšāĻŋāĻĻāĻž āĻŽā§‡āϟāĻžāϤ⧇ RecyclerView āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āĻ•āĻžāĻ¸ā§āϟāĻŽāĻžāχāϜ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤ RecyclerView āĻāϰ āϏāĻžāĻĨ⧇ āĻĄāĻžāϝāĻŧāύāĻžāĻŽāĻŋāĻ• āϤāĻžāϞāĻŋāĻ•āĻž āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύ -āĻ āĻŦāĻ°ā§āĻŖāĻŋāϤ āĻ¸ā§āĻŸā§āϝāĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄ āĻ•ā§āϞāĻžāϏāϗ⧁āϞāĻŋ āĻŦ⧇āĻļāĻŋāϰāĻ­āĻžāĻ— āĻŦāĻŋāĻ•āĻžāĻļāĻ•āĻžāϰ⧀āĻĻ⧇āϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧ āϏāĻŽāĻ¸ā§āϤ āĻ•āĻžāĻ°ā§āϝāĻ•āĻžāϰāĻŋāϤāĻž āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰ⧇āĨ¤ āĻ…āύ⧇āĻ• āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇, āφāĻĒāύāĻžāϕ⧇ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻ­āĻŋāω āĻšā§‹āĻ˛ā§āĻĄāĻžāϰ⧇āϰ āϜāĻ¨ā§āϝ āĻ­āĻŋāω āĻĄāĻŋāϜāĻžāχāύ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āĻāĻŦāĻ‚ āωāĻĒāϝ⧁āĻ•ā§āϤ āĻĄā§‡āϟāĻž āĻĻāĻŋāϝāĻŧ⧇ āϏ⧇āχ āĻ­āĻŋāω āφāĻĒāĻĄā§‡āϟ āĻ•āϰāϤ⧇ āϕ⧋āĻĄ āϞāĻŋāĻ–āϤ⧇ āĻšāĻŦ⧇āĨ¤ āϝāĻžāχāĻšā§‹āĻ•, āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒ⧇āϰ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧāϤāĻž āĻĨāĻžāĻ•āϞ⧇, āφāĻĒāύāĻŋ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ āωāĻĒāĻžāϝāĻŧ⧇ āĻŽāĻžāύāĻ• āφāϚāϰāĻŖ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤ āĻāχ āύāĻĨāĻŋāϤ⧇ āϏāĻŽā§āĻ­āĻžāĻŦā§āϝ āĻ•āĻŋāϛ⧁ āĻ•āĻžāĻ¸ā§āϟāĻŽāĻžāχāĻœā§‡āĻļāύ āĻŦāĻ°ā§āĻŖāύāĻž āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇āĨ¤

āϞ⧇āφāωāϟ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰ⧁āύ

RecyclerView āĻāĻ•āϟāĻŋ āϞ⧇āφāωāϟ āĻŽā§āϝāĻžāύ⧇āϜāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻ¸ā§āĻ•ā§āϰāĻŋāύ⧇ āĻĒ⧃āĻĨāĻ• āφāχāĻŸā§‡āĻŽāϗ⧁āϞāĻŋāϰ āĻ…āĻŦāĻ¸ā§āĻĨāĻžāύ āύāĻŋāĻ°ā§āϧāĻžāϰāĻŖ āĻ•āϰāϤ⧇ āĻāĻŦāĻ‚ āĻ•āĻ–āύ āφāχāĻŸā§‡āĻŽ āĻ­āĻŋāω āĻĒ⧁āύāϰāĻžāϝāĻŧ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āϤāĻž āύāĻŋāĻ°ā§āϧāĻžāϰāĻŖ āĻ•āϰāϤ⧇ āϝāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āĻ•āĻžāϛ⧇ āφāϰ āĻĻ⧃āĻļā§āϝāĻŽāĻžāύ āύāϝāĻŧāĨ¤ āĻāĻ•āϟāĻŋ āĻ­āĻŋāω āĻĒ⧁āύāσāĻŦā§āϝāĻŦāĻšāĻžāϰ āĻŦāĻž āĻĒ⧁āύāĻ°ā§āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇, āĻāĻ•āϟāĻŋ āϞ⧇āφāωāϟ āĻŽā§āϝāĻžāύ⧇āϜāĻžāϰ āĻ…ā§āϝāĻžāĻĄāĻžāĻĒā§āϟāĻžāϰāϕ⧇ āĻĄā§‡āϟāĻžāϏ⧇āϟ āĻĨ⧇āϕ⧇ āĻāĻ•āϟāĻŋ āĻ­āĻŋāĻ¨ā§āύ āωāĻĒāĻžāĻĻāĻžāύ āĻĻāĻŋāϝāĻŧ⧇ āĻ­āĻŋāωāϝāĻŧ⧇āϰ āĻŦāĻŋāώāϝāĻŧāĻŦāĻ¸ā§āϤ⧁ āĻĒā§āϰāϤāĻŋāĻ¸ā§āĻĨāĻžāĻĒāύ āĻ•āϰāϤ⧇ āĻŦāϞāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āĻāχāĻ­āĻžāĻŦ⧇ āĻ­āĻŋāω āϰāĻŋāϏāĻžāχāĻ•ā§āϞāĻŋāĻ‚ āĻ•āϰāĻž āĻ…āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧ āĻ­āĻŋāω āϤ⧈āϰāĻŋ āĻāĻĄāĻŧāĻŋāϝāĻŧ⧇ āĻŦāĻž āĻŦā§āϝāϝāĻŧāĻŦāĻšā§āϞ findViewById() āϞ⧁āĻ•āφāĻĒ āϏāĻŽā§āĻĒāĻžāĻĻāύ āĻ•āϰ⧇ āĻ•āĻ°ā§āĻŽāĻ•ā§āώāĻŽāϤāĻž āωāĻ¨ā§āύāϤ āĻ•āϰ⧇āĨ¤ āĻ…ā§āϝāĻžāĻ¨ā§āĻĄā§āϰāϝāĻŧ⧇āĻĄ āϏāĻžāĻĒā§‹āĻ°ā§āϟ āϞāĻžāχāĻŦā§āϰ⧇āϰāĻŋāϤ⧇ āϤāĻŋāύāϟāĻŋ āĻ¸ā§āĻŸā§āϝāĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄ āϞ⧇āφāωāϟ āĻŽā§āϝāĻžāύ⧇āϜāĻžāϰ āϰāϝāĻŧ⧇āϛ⧇, āϝāĻžāϰ āĻĒā§āϰāϤāĻŋāϟāĻŋāϤ⧇ āĻ…āύ⧇āĻ•āϗ⧁āϞāĻŋ āĻ•āĻžāĻ¸ā§āϟāĻŽāĻžāχāĻœā§‡āĻļāύ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒ āϰāϝāĻŧ⧇āϛ⧇:

  • LinearLayoutManager : āφāχāĻŸā§‡āĻŽāϗ⧁āϞāĻŋāϕ⧇ āĻāĻ•-āĻŽāĻžāĻ¤ā§āϰāĻŋāĻ• āϤāĻžāϞāĻŋāĻ•āĻžāϝāĻŧ āϏāĻžāϜāĻžāϝāĻŧāĨ¤ LinearLayoutManager āϏāĻžāĻĨ⧇ RecyclerView āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž ListView āϞ⧇āφāωāĻŸā§‡āϰ āĻŽāϤ⧋ āĻ•āĻžāĻ°ā§āϝāĻ•āĻžāϰāĻŋāϤāĻž āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰ⧇āĨ¤
  • GridLayoutManager : āĻāĻ•āϟāĻŋ āĻĻā§āĻŦāĻŋ-āĻŽāĻžāĻ¤ā§āϰāĻŋāĻ• āĻ—ā§āϰāĻŋāĻĄā§‡ āφāχāĻŸā§‡āĻŽāϗ⧁āϞāĻŋāϕ⧇ āϏāĻžāϜāĻžāϝāĻŧ, āϝ⧇āĻŽāύ āĻāĻ•āϟāĻŋ āĻšā§‡āĻ•āĻžāϰāĻŦā§‹āĻ°ā§āĻĄā§‡āϰ āĻ¸ā§āϕ⧋āϝāĻŧāĻžāϰāϗ⧁āϞāĻŋāĨ¤ GridLayoutManager āϏāĻžāĻĨ⧇ āĻāĻ•āϟāĻŋ RecyclerView āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻāĻ•āϟāĻŋ GridView āϞ⧇āφāωāĻŸā§‡āϰ āĻŽāϤ⧋ āĻ•āĻžāĻ°ā§āϝāĻ•āĻžāϰāĻŋāϤāĻž āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰ⧇āĨ¤
  • StaggeredGridLayoutManager : āφāχāĻŸā§‡āĻŽāϗ⧁āϞāĻŋāϕ⧇ āĻāĻ•āϟāĻŋ āĻĻā§āĻŦāĻŋ-āĻŽāĻžāĻ¤ā§āϰāĻŋāĻ• āĻ—ā§āϰāĻŋāĻĄā§‡ āϏāĻžāϜāĻžāϝāĻŧ, āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻ•āϞāĻžāĻŽ āφāϗ⧇āϰ āĻĨ⧇āϕ⧇ āĻ•āĻŋāϛ⧁āϟāĻž āĻ…āĻĢāϏ⧇āϟ āĻ•āϰ⧇, āϝ⧇āĻŽāύ āĻāĻ•āϟāĻŋ āφāĻŽā§‡āϰāĻŋāĻ•āĻžāύ āĻĒāϤāĻžāĻ•āĻžāϰ āϤāĻžāϰāĻžāϰ āĻŽāϤ⧋āĨ¤

āϝāĻĻāĻŋ āĻāχ āϞ⧇āφāωāϟ āĻŽā§āϝāĻžāύ⧇āϜāĻžāϰāϗ⧁āϞāĻŋ āφāĻĒāύāĻžāϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āĻ…āύ⧁āϏāĻžāϰ⧇ āύāĻž āĻšāϝāĻŧ, āφāĻĒāύāĻŋ RecyclerView.LayoutManager āĻŦāĻŋāĻŽā§‚āĻ°ā§āϤ āĻ•ā§āϞāĻžāϏ āĻĒā§āϰāϏāĻžāϰāĻŋāϤ āĻ•āϰ⧇ āύāĻŋāĻœā§‡āϰ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤

āφāχāĻŸā§‡āĻŽ āĻ…ā§āϝāĻžāύāĻŋāĻŽā§‡āĻļāύ āϝ⧋āĻ— āĻ•āϰ⧁āύ

āϝāĻ–āύāχ āĻāĻ•āϟāĻŋ āφāχāĻŸā§‡āĻŽ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻšāϝāĻŧ, RecyclerView āĻāϰ āĻšā§‡āĻšāĻžāϰāĻž āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāϤ⧇ āĻāĻ•āϟāĻŋ āĻ…ā§āϝāĻžāύāĻŋāĻŽā§‡āϟāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇āĨ¤ āĻāχ āĻ…ā§āϝāĻžāύāĻŋāĻŽā§‡āϟāϰ āĻāĻŽāύ āĻāĻ•āϟāĻŋ āĻŦāĻ¸ā§āϤ⧁ āϝāĻž āĻŦāĻŋāĻŽā§‚āĻ°ā§āϤ RecyclerView.ItemAnimator āĻ•ā§āϞāĻžāϏ āĻĒā§āϰāϏāĻžāϰāĻŋāϤ āĻ•āϰ⧇āĨ¤ āĻĄāĻŋāĻĢāĻ˛ā§āϟāϰ⧂āĻĒ⧇, RecyclerView āĻ…ā§āϝāĻžāύāĻŋāĻŽā§‡āĻļāύ āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰāϤ⧇ DefaultItemAnimator āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇āĨ¤ āφāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻ•āĻžāĻ¸ā§āϟāĻŽ āĻ…ā§āϝāĻžāύāĻŋāĻŽā§‡āĻļāύ āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰāϤ⧇ āϚāĻžāύ, āφāĻĒāύāĻŋ RecyclerView.ItemAnimator āĻĒā§āϰāϏāĻžāϰāĻŋāϤ āĻ•āϰ⧇ āφāĻĒāύāĻžāϰ āύāĻŋāϜāĻ¸ā§āĻŦ āĻ…ā§āϝāĻžāύāĻŋāĻŽā§‡āϟāϰ āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āϏāĻ‚āĻœā§āĻžāĻžāϝāĻŧāĻŋāϤ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤

āϤāĻžāϞāĻŋāĻ•āĻž-āφāχāĻŸā§‡āĻŽ āύāĻŋāĻ°ā§āĻŦāĻžāϚāύ āϏāĻ•ā§āώāĻŽ āĻ•āϰ⧁āύ

recyclerview-selection āϞāĻžāχāĻŦā§āϰ⧇āϰāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āĻĻ⧇āϰ āĻ¸ā§āĻĒāĻ°ā§āĻļ āĻŦāĻž āĻŽāĻžāωāϏ āχāύāĻĒ⧁āϟ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻāĻ•āϟāĻŋ RecyclerView āϤāĻžāϞāĻŋāĻ•āĻžāϰ āφāχāĻŸā§‡āĻŽ āύāĻŋāĻ°ā§āĻŦāĻžāϚāύ āĻ•āϰāϤ⧇ āĻĻ⧇āϝāĻŧāĨ¤ āĻāϟāĻŋ āφāĻĒāύāĻžāϕ⧇ āĻāĻ•āϟāĻŋ āύāĻŋāĻ°ā§āĻŦāĻžāϚāĻŋāϤ āφāχāĻŸā§‡āĻŽā§‡āϰ āĻ­āĻŋāĻœā§āϝ⧁āϝāĻŧāĻžāϞ āωāĻĒāĻ¸ā§āĻĨāĻžāĻĒāύāĻžāϰ āωāĻĒāϰ āύāĻŋāϝāĻŧāĻ¨ā§āĻ¤ā§āϰāĻŖ āĻŦāϜāĻžāϝāĻŧ āϰāĻžāĻ–āϤ⧇ āĻĻ⧇āϝāĻŧāĨ¤ āφāĻĒāύāĻŋ āύāĻŋāĻ°ā§āĻŦāĻžāϚāύ āφāϚāϰāĻŖ āύāĻŋāϝāĻŧāĻ¨ā§āĻ¤ā§āϰāĻŖāĻ•āĻžāϰ⧀ āύ⧀āϤāĻŋāϗ⧁āϞāĻŋāϰ āωāĻĒāϰ āύāĻŋāϝāĻŧāĻ¨ā§āĻ¤ā§āϰāĻŖāĻ“ āϰāĻžāĻ–āϤ⧇ āĻĒāĻžāϰ⧇āύ, āϝ⧇āĻŽāύ āϕ⧋āύ āφāχāĻŸā§‡āĻŽāϗ⧁āϞāĻŋ āύāĻŋāĻ°ā§āĻŦāĻžāϚāύ⧇āϰ āϜāĻ¨ā§āϝ āϝ⧋āĻ—ā§āϝ āĻāĻŦāĻ‚ āĻ•āϤāϗ⧁āϞāĻŋ āφāχāĻŸā§‡āĻŽ āύāĻŋāĻ°ā§āĻŦāĻžāϚāύ āĻ•āϰāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

āĻāĻ•āϟāĻŋ RecyclerView āωāĻĻāĻžāĻšāϰāϪ⧇ āύāĻŋāĻ°ā§āĻŦāĻžāϚāύ āϏāĻŽāĻ°ā§āĻĨāύ āϝ⧋āĻ— āĻ•āϰāϤ⧇, āĻāχ āĻĒāĻĻāĻ•ā§āώ⧇āĻĒāϗ⧁āϞāĻŋ āĻ…āύ⧁āϏāϰāĻŖ āĻ•āϰ⧁āύ:

  1. āϕ⧋āύ āύāĻŋāĻ°ā§āĻŦāĻžāϚāύ āϕ⧀ āϧāϰāύ⧇āϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āϤāĻž āύāĻŋāĻ°ā§āϧāĻžāϰāĻŖ āĻ•āϰ⧁āύ, āϤāĻžāϰāĻĒāϰ āĻāĻ•āϟāĻŋ ItemKeyProvider āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύāĨ¤

    āφāĻĒāύāĻŋ āύāĻŋāĻ°ā§āĻŦāĻžāϚāĻŋāϤ āφāχāĻŸā§‡āĻŽ āϏāύāĻžāĻ•ā§āϤ āĻ•āϰāϤ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ āϤāĻŋāύāϟāĻŋ āĻŽā§‚āϞ āĻĒā§āϰāĻ•āĻžāϰ āφāϛ⧇:

    • Parcelable āĻāĻŦāĻ‚ āĻāϰ āϏāĻžāĻŦāĻ•ā§āϞāĻžāϏ, āϝ⧇āĻŽāύ Uri
    • String
    • Long

    āύāĻŋāĻ°ā§āĻŦāĻžāϚāύ-āϕ⧀ āĻĒā§āϰāĻ•āĻžāϰ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āĻŦāĻŋāĻ¸ā§āϤāĻžāϰāĻŋāϤ āϤāĻĨā§āϝ⧇āϰ āϜāĻ¨ā§āϝ, SelectionTracker.Builder āĻĻ⧇āϖ⧁āύāĨ¤

  2. ItemDetailsLookup āĻĒā§āϰāϝāĻŧā§‹āĻ— āĻ•āϰ⧁āύāĨ¤
  3. ItemDetailsLookup āĻāĻ•āϟāĻŋ MotionEvent āĻĒā§āϰāĻĻāĻ¤ā§āϤ RecyclerView āφāχāĻŸā§‡āĻŽ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āύāĻŋāĻ°ā§āĻŦāĻžāϚāύ āϞāĻžāχāĻŦā§āϰ⧇āϰāĻŋ āϤāĻĨā§āϝ āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āĻ•āϰāϤ⧇ āĻĻ⧇āϝāĻŧāĨ¤ āĻāϟāĻŋ āĻ•āĻžāĻ°ā§āϝāĻ•āϰāĻ­āĻžāĻŦ⧇ ItemDetails āĻĻ⧃āĻˇā§āϟāĻžāĻ¨ā§āϤāϗ⧁āϞāĻŋāϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āĻĢā§āϝāĻžāĻ•ā§āϟāϰāĻŋ āϝāĻž āĻāĻ•āϟāĻŋ RecyclerView.ViewHolder āωāĻĻāĻžāĻšāϰāĻŖ āĻĻā§āĻŦāĻžāϰāĻž āĻŦā§āϝāĻžāĻ• āφāĻĒ āĻ•āϰāĻž āĻšāϝāĻŧ āĻŦāĻž āϏ⧇āĻ–āĻžāύ āĻĨ⧇āϕ⧇ āĻŦ⧇āϰ āĻ•āϰāĻž āĻšāϝāĻŧ⧎

  4. āφāχāĻŸā§‡āĻŽ āφāĻĒāĻĄā§‡āϟ āĻ•āϰ⧁āύ RecyclerView āϤ⧇ āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ View āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āϏ⧇āϗ⧁āϞāĻŋ āύāĻŋāĻ°ā§āĻŦāĻžāϚāύ āĻ•āϰ⧇āύ āĻŦāĻž āĻ…āύāĻŋāĻ°ā§āĻŦāĻžāϚāύ āĻ•āϰ⧇āύ āĻ•āĻŋāύāĻž āϤāĻž āĻĒā§āϰāϤāĻŋāĻĢāϞāĻŋāϤ āĻ•āϰāϤ⧇āĨ¤

    āύāĻŋāĻ°ā§āĻŦāĻžāϚāύ āϞāĻžāχāĻŦā§āϰ⧇āϰāĻŋ āύāĻŋāĻ°ā§āĻŦāĻžāϚāĻŋāϤ āφāχāĻŸā§‡āĻŽāϗ⧁āϞāĻŋāϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āĻĄāĻŋāĻĢāĻ˛ā§āϟ āĻ­āĻŋāĻœā§āϝ⧁āϝāĻŧāĻžāϞ āϏāĻœā§āϜāĻž āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰ⧇ āύāĻžāĨ¤ āφāĻĒāύāĻŋ onBindViewHolder() āĻĒā§āϰāϝāĻŧā§‹āĻ— āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ āĻāϟāĻŋ āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰ⧁āύāĨ¤ āφāĻŽāϰāĻž āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āĻĒāĻĻā§āϧāϤāĻŋāϰ āϏ⧁āĻĒāĻžāϰāĻŋāĻļ:

    • onBindViewHolder() -āĻ, setActivated() — āϏ⧇āϟ āύāĻž āĻ•āϰ⧇ setSelected() — View āĻŦāĻ¸ā§āϤ⧁āϟāĻŋāϤ⧇ true āĻŦāĻž false āϏāĻš āĻ•āϞ ​​āĻ•āϰ⧁āύ, āφāχāĻŸā§‡āĻŽāϟāĻŋ āύāĻŋāĻ°ā§āĻŦāĻžāϚāĻŋāϤ āĻ•āĻŋāύāĻž āϤāĻžāϰ āωāĻĒāϰ āύāĻŋāĻ°ā§āĻ­āϰ āĻ•āϰ⧇āĨ¤
    • āϏāĻ•ā§āϰāĻŋāϝāĻŧ āĻ¸ā§āĻĨāĻŋāϤāĻŋ āωāĻĒāĻ¸ā§āĻĨāĻžāĻĒāύ āĻ•āϰāϤ⧇ āĻĻ⧃āĻļā§āϝ⧇āϰ āĻ¸ā§āϟāĻžāχāϞāĻŋāĻ‚ āφāĻĒāĻĄā§‡āϟ āĻ•āϰ⧁āύāĨ¤ āφāĻŽāϰāĻž āĻ¸ā§āϟāĻžāχāϞāĻŋāĻ‚ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āϰāĻ™ āϰāĻžāĻœā§āϝ āϤāĻžāϞāĻŋāĻ•āĻž āϏāĻŽā§āĻĒāĻĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻžāϰ āĻĒāϰāĻžāĻŽāĻ°ā§āĻļ āĻĻāĻŋāχāĨ¤
  5. āύāĻŋāĻ°ā§āĻŦāĻžāϚāύ⧇āϰ āωāĻĒāϰ āĻāĻ•āϟāĻŋ āĻ•ā§āϰāĻŋāϝāĻŧāĻž āϏāĻŽā§āĻĒāĻžāĻĻāύ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϕ⧇ āϏāϰāĻžā§āϜāĻžāĻŽ āϏāϰāĻŦāϰāĻžāĻš āĻ•āϰāϤ⧇ ActionMode āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύāĨ¤
  6. āĻāĻ•āϟāĻŋ āύāĻŋāĻ°ā§āĻŦāĻžāϚāύ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāĻŋāϤ āĻšāϞ⧇ āĻŦāĻŋāĻœā§āĻžāĻĒā§āϤāĻŋ āĻĒāĻžāĻ“āϝāĻŧāĻžāϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ SelectionTracker.SelectionObserver āύāĻŋāĻŦāĻ¨ā§āϧāύ āĻ•āϰ⧁āύ⧎ āϝāĻ–āύ āĻāĻ•āϟāĻŋ āύāĻŋāĻ°ā§āĻŦāĻžāϚāύ āĻĒā§āϰāĻĨāĻŽ āϤ⧈āϰāĻŋ āĻ•āϰāĻž āĻšāϝāĻŧ, āϤāĻ–āύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āĻ•āĻžāϛ⧇ āĻāϟāĻŋ āωāĻĒāĻ¸ā§āĻĨāĻžāĻĒāύ āĻ•āϰāϤ⧇ āĻāĻŦāĻ‚ āύāĻŋāĻ°ā§āĻŦāĻžāϚāύ-āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻ•ā§āϰāĻŋāϝāĻŧāĻžāϗ⧁āϞāĻŋ āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰāϤ⧇ ActionMode āĻļ⧁āϰ⧁ āĻ•āϰ⧁āύāĨ¤ āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, āφāĻĒāύāĻŋ ActionMode āĻŦāĻžāϰ⧇ āĻāĻ•āϟāĻŋ āĻĄāĻŋāϞāĻŋāϟ āĻŦā§‹āϤāĻžāĻŽ āϝ⧋āĻ— āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ āĻāĻŦāĻ‚ āύāĻŋāĻ°ā§āĻŦāĻžāϚāύāϟāĻŋ āϏāĻžāĻĢ āĻ•āϰāϤ⧇ āĻŦāĻžāϰ⧇āϰ āĻĒāĻŋāĻ›āύ⧇āϰ āϤ⧀āϰāϟāĻŋ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤ āϝāĻ–āύ āύāĻŋāĻ°ā§āĻŦāĻžāϚāύ āĻ–āĻžāϞāĻŋ āĻšāϝāĻŧ⧇ āϝāĻžāϝāĻŧ-āϝāĻĻāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āĻļ⧇āώāĻŦāĻžāϰ āύāĻŋāĻ°ā§āĻŦāĻžāϚāύāϟāĻŋ āϏāĻžāĻĢ āĻ•āϰ⧇āύ-āĻ…ā§āϝāĻžāĻ•āĻļāύ āĻŽā§‹āĻĄ āĻŦāĻ¨ā§āϧ āĻ•āϰ⧁āύāĨ¤

  7. āϕ⧋āύ⧋ āĻŦā§āϝāĻžāĻ–ā§āϝāĻž āĻ•āϰāĻž āϏ⧇āϕ⧇āĻ¨ā§āĻĄāĻžāϰāĻŋ āĻ•ā§āϰāĻŋāϝāĻŧāĻž āϏāĻŽā§āĻĒāĻžāĻĻāύ āĻ•āϰ⧁āύāĨ¤
  8. āχāϭ⧇āĻ¨ā§āϟ āĻĒā§āϰāĻ•ā§āϰāĻŋāϝāĻŧāĻžāĻ•āϰāĻŖ āĻĒāĻžāχāĻĒāϞāĻžāχāύ⧇āϰ āĻļ⧇āώ⧇, āϞāĻžāχāĻŦā§āϰ⧇āϰāĻŋ āύāĻŋāĻ°ā§āϧāĻžāϰāĻŖ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇ āϝ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āĻāĻ•āϟāĻŋ āφāχāĻŸā§‡āĻŽ āϏāĻ•ā§āϰāĻŋāϝāĻŧ āĻ•āϰāĻžāϰ āĻšā§‡āĻˇā§āϟāĻž āĻ•āϰāϛ⧇āύ, āĻāϟāĻŋ āĻŸā§āϝāĻžāĻĒ āĻ•āϰ⧇, āĻŦāĻž āĻāĻ•āϟāĻŋ āφāχāĻŸā§‡āĻŽ āĻŦāĻž āύāĻŋāĻ°ā§āĻŦāĻžāϚāĻŋāϤ āφāχāĻŸā§‡āĻŽāϗ⧁āϞāĻŋāϰ āϏ⧇āϟ āĻŸā§‡āύ⧇ āφāύāĻžāϰ āĻšā§‡āĻˇā§āϟāĻž āĻ•āϰāϛ⧇āύ⧎ āωāĻĒāϝ⧁āĻ•ā§āϤ āĻļā§āϰ⧋āϤāĻž āύāĻŋāĻŦāĻ¨ā§āϧāύ āĻ•āϰ⧇ āĻāχ āĻŦā§āϝāĻžāĻ–ā§āϝāĻžāϗ⧁āϞāĻŋāϤ⧇ āĻĒā§āϰāϤāĻŋāĻ•ā§āϰāĻŋāϝāĻŧāĻž āϜāĻžāύāĻžāύāĨ¤ āφāϰāĻ“ āϤāĻĨā§āϝ⧇āϰ āϜāĻ¨ā§āϝ, SelectionTracker.Builder āĻĻ⧇āϖ⧁āύāĨ¤

  9. SelectionTracker.Builder āĻĻāĻŋāϝāĻŧ⧇ āϏāĻŦāĻ•āĻŋāϛ⧁ āĻāĻ•āĻ¤ā§āϰāĻŋāϤ āĻ•āϰ⧁āύāĨ¤
  10. āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āωāĻĻāĻžāĻšāϰāĻŖ āĻĻ⧇āĻ–āĻžāϝāĻŧ āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āĻāχ āϟ⧁āĻ•āϰāĻž āĻāĻ•āϏāĻžāĻĨ⧇ āϰāĻžāĻ–āĻž:

    āϕ⧋āϟāϞāĻŋāύ

        var tracker = SelectionTracker.Builder(
            "my-selection-id",
            recyclerView,
            StableIdKeyProvider(recyclerView),
            MyDetailsLookup(recyclerView),
            StorageStrategy.createLongStorage())
                .withOnItemActivatedListener(myItemActivatedListener)
                .build()
        

    āϜāĻžāĻ­āĻž

        SelectionTracker tracker = new SelectionTracker.Builder<>(
                "my-selection-id",
                recyclerView,
                new StableIdKeyProvider(recyclerView),
                new MyDetailsLookup(recyclerView),
                StorageStrategy.createLongStorage())
                .withOnItemActivatedListener(myItemActivatedListener)
                .build();
        

    āĻāĻ•āϟāĻŋ SelectionTracker āĻĻ⧃āĻˇā§āϟāĻžāĻ¨ā§āϤ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇, āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒāϟāĻŋāϕ⧇ āĻ…āĻŦāĻļā§āϝāχ āĻāĻ•āχ RecyclerView.Adapter āϏāϰāĻŦāϰāĻžāĻš āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āϝāĻž āφāĻĒāύāĻŋ SelectionTracker.Builder āĻĨ⧇āϕ⧇ RecyclerView āφāϰāĻŽā§āĻ­ āĻ•āϰāϤ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇āύāĨ¤ āĻāχ āĻ•āĻžāϰāϪ⧇, āφāĻĒāύāĻŋ SelectionTracker āχāĻ¨ā§āϏāĻŸā§āϝāĻžāĻ¨ā§āϏ āϤ⧈āϰāĻŋ āĻ•āϰāĻžāϰ āĻĒāϰ⧇, āĻāϟāĻŋ āφāĻĒāύāĻžāϰ RecyclerView.Adapter āĻ āχāύāĻœā§‡āĻ•ā§āϟ āĻ•āϰ⧁āύāĨ¤ āĻ…āĻ¨ā§āϝāĻĨāĻžāϝāĻŧ, āφāĻĒāύāĻŋ onBindViewHolder() āĻĒāĻĻā§āϧāϤāĻŋ āĻĨ⧇āϕ⧇ āĻāĻ•āϟāĻŋ āφāχāĻŸā§‡āĻŽā§‡āϰ āύāĻŋāĻ°ā§āĻŦāĻžāϚāĻŋāϤ āĻ¸ā§āĻĨāĻŋāϤāĻŋ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŦ⧇āύ āύāĻžāĨ¤

  11. āĻ•āĻžāĻ°ā§āϝāĻ•āϞāĻžāĻĒ āĻœā§€āĻŦāύāϚāĻ•ā§āϰ āχāϭ⧇āĻ¨ā§āϟ āύāĻŋāĻ°ā§āĻŦāĻžāϚāύ āĻ…āĻ¨ā§āϤāĻ°ā§āϭ⧁āĻ•ā§āϤ.
  12. āĻ…ā§āϝāĻžāĻ•ā§āϟāĻŋāĻ­āĻŋāϟāĻŋ āϞāĻžāχāĻĢāϏāĻžāχāϕ⧇āϞ āχāϭ⧇āĻ¨ā§āϟ āϜ⧁āĻĄāĻŧ⧇ āύāĻŋāĻ°ā§āĻŦāĻžāϚāύ⧇āϰ āĻ…āĻŦāĻ¸ā§āĻĨāĻž āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰāϤ⧇, āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒāϟāĻŋāϕ⧇ āĻ…āĻŦāĻļā§āϝāχ āĻ…ā§āϝāĻžāĻ•ā§āϟāĻŋāĻ­āĻŋāϟāĻŋāϰ onSaveInstanceState() āĻāĻŦāĻ‚ onRestoreInstanceState() āĻĒāĻĻā§āϧāϤāĻŋāϗ⧁āϞāĻŋ āĻĨ⧇āϕ⧇ āύāĻŋāĻ°ā§āĻŦāĻžāϚāύ āĻŸā§āĻ°ā§āϝāĻžāĻ•āĻžāϰ⧇āϰ onSaveInstanceState() āĻāĻŦāĻ‚ onRestoreInstanceState() āĻĒāĻĻā§āϧāϤāĻŋāϤ⧇ āĻ•āϞ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤ āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒāϟāĻŋāϕ⧇ āĻ…āĻŦāĻļā§āϝāχ SelectionTracker.Builder āĻ•āύāĻ¸ā§āĻŸā§āϰāĻžāĻ•ā§āϟāϰāϕ⧇ āĻāĻ•āϟāĻŋ āĻ…āύāĻ¨ā§āϝ āύāĻŋāĻ°ā§āĻŦāĻžāϚāύ āφāχāĻĄāĻŋ āϏāϰāĻŦāϰāĻžāĻš āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤ āĻāχ āφāχāĻĄāĻŋāϟāĻŋ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āĻ•āĻžāϰāĻŖ āĻāĻ•āϟāĻŋ āĻ•āĻžāĻ°ā§āϝāĻ•āϞāĻžāĻĒ āĻŦāĻž āĻāĻ•āϟāĻŋ āĻ–āĻŖā§āĻĄā§‡āϰ āĻāĻ•āĻžāϧāĻŋāĻ• āĻ¸ā§āĻŦāϤāĻ¨ā§āĻ¤ā§āϰ, āύāĻŋāĻ°ā§āĻŦāĻžāϚāύāϝ⧋āĻ—ā§āϝ āϤāĻžāϞāĻŋāĻ•āĻž āĻĨāĻžāĻ•āϤ⧇ āĻĒāĻžāϰ⧇, āϝāĻžāϰ āϏāĻŦāĻ•āϟāĻŋ āϤāĻžāĻĻ⧇āϰ āϏāĻ‚āϰāĻ•ā§āώāĻŋāϤ āĻ…āĻŦāĻ¸ā§āĻĨāĻžāϝāĻŧ āϟāĻŋāϕ⧇ āĻĨāĻžāĻ•āϤ⧇ āĻšāĻŦ⧇āĨ¤

āĻ…āϤāĻŋāϰāĻŋāĻ•ā§āϤ āϏāĻŽā§āĻĒāĻĻ

āĻ…āϤāĻŋāϰāĻŋāĻ•ā§āϤ āϤāĻĨā§āϝ⧇āϰ āϜāĻ¨ā§āϝ āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āϰ⧇āĻĢāĻžāϰ⧇āĻ¨ā§āϏ āĻĻ⧇āϖ⧁āύ.

,

āĻāĻ•āϟāĻŋ āĻ—āϤāĻŋāĻļā§€āϞ āϤāĻžāϞāĻŋāĻ•āĻž āĻ•āĻžāĻ¸ā§āϟāĻŽāĻžāχāϜ āĻ•āϰ⧁āύ āĻ…ā§āϝāĻžāĻ¨ā§āĻĄā§āϰāϝāĻŧ⧇āĻĄ āĻœā§‡āϟāĻĒā§āϝāĻžāϕ⧇āϰ āĻ…āĻ‚āĻļāĨ¤

āϰāϚāύāĻž āĻĒāĻĻā§āϧāϤāĻŋ āĻšā§‡āĻˇā§āϟāĻž āĻ•āϰ⧁āύ
āĻœā§‡āϟāĻĒā§āϝāĻžāĻ• āĻ•āĻŽā§āĻĒā§‹āϜ āĻšāϞ Android āĻāϰ āϜāĻ¨ā§āϝ āĻĒā§āϰāĻ¸ā§āϤāĻžāĻŦāĻŋāϤ UI āϟ⧁āϞāĻ•āĻŋāϟāĨ¤ āĻ•āĻŽā§āĻĒā§‹āĻœā§‡ āϞ⧇āφāωāĻŸā§‡āϰ āϏāĻžāĻĨ⧇ āϕ⧀āĻ­āĻžāĻŦ⧇ āĻ•āĻžāϜ āĻ•āϰāĻŦ⧇āύ āϤāĻž āĻļāĻŋāϖ⧁āύāĨ¤

āφāĻĒāύāĻŋ āφāĻĒāύāĻžāϰ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āϚāĻžāĻšāĻŋāĻĻāĻž āĻŽā§‡āϟāĻžāϤ⧇ RecyclerView āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āĻ•āĻžāĻ¸ā§āϟāĻŽāĻžāχāϜ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤ RecyclerView āĻāϰ āϏāĻžāĻĨ⧇ āĻĄāĻžāϝāĻŧāύāĻžāĻŽāĻŋāĻ• āϤāĻžāϞāĻŋāĻ•āĻž āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύ -āĻ āĻŦāĻ°ā§āĻŖāĻŋāϤ āĻ¸ā§āĻŸā§āϝāĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄ āĻ•ā§āϞāĻžāϏāϗ⧁āϞāĻŋ āĻŦ⧇āĻļāĻŋāϰāĻ­āĻžāĻ— āĻŦāĻŋāĻ•āĻžāĻļāĻ•āĻžāϰ⧀āĻĻ⧇āϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧ āϏāĻŽāĻ¸ā§āϤ āĻ•āĻžāĻ°ā§āϝāĻ•āĻžāϰāĻŋāϤāĻž āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰ⧇āĨ¤ āĻ…āύ⧇āĻ• āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇, āφāĻĒāύāĻžāϕ⧇ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻ­āĻŋāω āĻšā§‹āĻ˛ā§āĻĄāĻžāϰ⧇āϰ āϜāĻ¨ā§āϝ āĻ­āĻŋāω āĻĄāĻŋāϜāĻžāχāύ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āĻāĻŦāĻ‚ āωāĻĒāϝ⧁āĻ•ā§āϤ āĻĄā§‡āϟāĻž āĻĻāĻŋāϝāĻŧ⧇ āϏ⧇āχ āĻ­āĻŋāω āφāĻĒāĻĄā§‡āϟ āĻ•āϰāϤ⧇ āϕ⧋āĻĄ āϞāĻŋāĻ–āϤ⧇ āĻšāĻŦ⧇āĨ¤ āϝāĻžāχāĻšā§‹āĻ•, āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒ⧇āϰ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧāϤāĻž āĻĨāĻžāĻ•āϞ⧇, āφāĻĒāύāĻŋ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ āωāĻĒāĻžāϝāĻŧ⧇ āĻŽāĻžāύāĻ• āφāϚāϰāĻŖ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤ āĻāχ āύāĻĨāĻŋāϤ⧇ āϏāĻŽā§āĻ­āĻžāĻŦā§āϝ āĻ•āĻŋāϛ⧁ āĻ•āĻžāĻ¸ā§āϟāĻŽāĻžāχāĻœā§‡āĻļāύ āĻŦāĻ°ā§āĻŖāύāĻž āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇āĨ¤

āϞ⧇āφāωāϟ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰ⧁āύ

RecyclerView āĻāĻ•āϟāĻŋ āϞ⧇āφāωāϟ āĻŽā§āϝāĻžāύ⧇āϜāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻ¸ā§āĻ•ā§āϰāĻŋāύ⧇ āĻĒ⧃āĻĨāĻ• āφāχāĻŸā§‡āĻŽāϗ⧁āϞāĻŋāϰ āĻ…āĻŦāĻ¸ā§āĻĨāĻžāύ āύāĻŋāĻ°ā§āϧāĻžāϰāĻŖ āĻ•āϰāϤ⧇ āĻāĻŦāĻ‚ āĻ•āĻ–āύ āφāχāĻŸā§‡āĻŽ āĻ­āĻŋāω āĻĒ⧁āύāϰāĻžāϝāĻŧ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āϤāĻž āύāĻŋāĻ°ā§āϧāĻžāϰāĻŖ āĻ•āϰāϤ⧇ āϝāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āĻ•āĻžāϛ⧇ āφāϰ āĻĻ⧃āĻļā§āϝāĻŽāĻžāύ āύāϝāĻŧāĨ¤ āĻāĻ•āϟāĻŋ āĻ­āĻŋāω āĻĒ⧁āύāσāĻŦā§āϝāĻŦāĻšāĻžāϰ āĻŦāĻž āĻĒ⧁āύāĻ°ā§āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇, āĻāĻ•āϟāĻŋ āϞ⧇āφāωāϟ āĻŽā§āϝāĻžāύ⧇āϜāĻžāϰ āĻ…ā§āϝāĻžāĻĄāĻžāĻĒā§āϟāĻžāϰāϕ⧇ āĻĄā§‡āϟāĻžāϏ⧇āϟ āĻĨ⧇āϕ⧇ āĻāĻ•āϟāĻŋ āĻ­āĻŋāĻ¨ā§āύ āωāĻĒāĻžāĻĻāĻžāύ āĻĻāĻŋāϝāĻŧ⧇ āĻ­āĻŋāωāϝāĻŧ⧇āϰ āĻŦāĻŋāώāϝāĻŧāĻŦāĻ¸ā§āϤ⧁ āĻĒā§āϰāϤāĻŋāĻ¸ā§āĻĨāĻžāĻĒāύ āĻ•āϰāϤ⧇ āĻŦāϞāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āĻāχāĻ­āĻžāĻŦ⧇ āĻ­āĻŋāω āϰāĻŋāϏāĻžāχāĻ•ā§āϞāĻŋāĻ‚ āĻ•āϰāĻž āĻ…āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧ āĻ­āĻŋāω āϤ⧈āϰāĻŋ āĻāĻĄāĻŧāĻŋāϝāĻŧ⧇ āĻŦāĻž āĻŦā§āϝāϝāĻŧāĻŦāĻšā§āϞ findViewById() āϞ⧁āĻ•āφāĻĒ āϏāĻŽā§āĻĒāĻžāĻĻāύ āĻ•āϰ⧇ āĻ•āĻ°ā§āĻŽāĻ•ā§āώāĻŽāϤāĻž āωāĻ¨ā§āύāϤ āĻ•āϰ⧇āĨ¤ āĻ…ā§āϝāĻžāĻ¨ā§āĻĄā§āϰāϝāĻŧ⧇āĻĄ āϏāĻžāĻĒā§‹āĻ°ā§āϟ āϞāĻžāχāĻŦā§āϰ⧇āϰāĻŋāϤ⧇ āϤāĻŋāύāϟāĻŋ āĻ¸ā§āĻŸā§āϝāĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄ āϞ⧇āφāωāϟ āĻŽā§āϝāĻžāύ⧇āϜāĻžāϰ āϰāϝāĻŧ⧇āϛ⧇, āϝāĻžāϰ āĻĒā§āϰāϤāĻŋāϟāĻŋāϤ⧇ āĻ…āύ⧇āĻ•āϗ⧁āϞāĻŋ āĻ•āĻžāĻ¸ā§āϟāĻŽāĻžāχāĻœā§‡āĻļāύ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒ āϰāϝāĻŧ⧇āϛ⧇:

  • LinearLayoutManager : āφāχāĻŸā§‡āĻŽāϗ⧁āϞāĻŋāϕ⧇ āĻāĻ•-āĻŽāĻžāĻ¤ā§āϰāĻŋāĻ• āϤāĻžāϞāĻŋāĻ•āĻžāϝāĻŧ āϏāĻžāϜāĻžāϝāĻŧāĨ¤ LinearLayoutManager āϏāĻžāĻĨ⧇ RecyclerView āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž ListView āϞ⧇āφāωāĻŸā§‡āϰ āĻŽāϤ⧋ āĻ•āĻžāĻ°ā§āϝāĻ•āĻžāϰāĻŋāϤāĻž āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰ⧇āĨ¤
  • GridLayoutManager : āĻāĻ•āϟāĻŋ āĻĻā§āĻŦāĻŋ-āĻŽāĻžāĻ¤ā§āϰāĻŋāĻ• āĻ—ā§āϰāĻŋāĻĄā§‡ āφāχāĻŸā§‡āĻŽāϗ⧁āϞāĻŋāϕ⧇ āϏāĻžāϜāĻžāϝāĻŧ, āϝ⧇āĻŽāύ āĻāĻ•āϟāĻŋ āĻšā§‡āĻ•āĻžāϰāĻŦā§‹āĻ°ā§āĻĄā§‡āϰ āĻ¸ā§āϕ⧋āϝāĻŧāĻžāϰāϗ⧁āϞāĻŋāĨ¤ GridLayoutManager āϏāĻžāĻĨ⧇ āĻāĻ•āϟāĻŋ RecyclerView āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻāĻ•āϟāĻŋ GridView āϞ⧇āφāωāĻŸā§‡āϰ āĻŽāϤ⧋ āĻ•āĻžāĻ°ā§āϝāĻ•āĻžāϰāĻŋāϤāĻž āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰ⧇āĨ¤
  • StaggeredGridLayoutManager : āφāχāĻŸā§‡āĻŽāϗ⧁āϞāĻŋāϕ⧇ āĻāĻ•āϟāĻŋ āĻĻā§āĻŦāĻŋ-āĻŽāĻžāĻ¤ā§āϰāĻŋāĻ• āĻ—ā§āϰāĻŋāĻĄā§‡ āϏāĻžāϜāĻžāϝāĻŧ, āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻ•āϞāĻžāĻŽ āφāϗ⧇āϰ āĻĨ⧇āϕ⧇ āĻ•āĻŋāϛ⧁āϟāĻž āĻ…āĻĢāϏ⧇āϟ āĻ•āϰ⧇, āϝ⧇āĻŽāύ āĻāĻ•āϟāĻŋ āφāĻŽā§‡āϰāĻŋāĻ•āĻžāύ āĻĒāϤāĻžāĻ•āĻžāϰ āϤāĻžāϰāĻžāϰ āĻŽāϤ⧋āĨ¤

āϝāĻĻāĻŋ āĻāχ āϞ⧇āφāωāϟ āĻŽā§āϝāĻžāύ⧇āϜāĻžāϰāϗ⧁āϞāĻŋ āφāĻĒāύāĻžāϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āĻ…āύ⧁āϏāĻžāϰ⧇ āύāĻž āĻšāϝāĻŧ, āφāĻĒāύāĻŋ RecyclerView.LayoutManager āĻŦāĻŋāĻŽā§‚āĻ°ā§āϤ āĻ•ā§āϞāĻžāϏ āĻĒā§āϰāϏāĻžāϰāĻŋāϤ āĻ•āϰ⧇ āύāĻŋāĻœā§‡āϰ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤

āφāχāĻŸā§‡āĻŽ āĻ…ā§āϝāĻžāύāĻŋāĻŽā§‡āĻļāύ āϝ⧋āĻ— āĻ•āϰ⧁āύ

āϝāĻ–āύāχ āĻāĻ•āϟāĻŋ āφāχāĻŸā§‡āĻŽ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻšāϝāĻŧ, RecyclerView āĻāϰ āĻšā§‡āĻšāĻžāϰāĻž āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāϤ⧇ āĻāĻ•āϟāĻŋ āĻ…ā§āϝāĻžāύāĻŋāĻŽā§‡āϟāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇āĨ¤ āĻāχ āĻ…ā§āϝāĻžāύāĻŋāĻŽā§‡āϟāϰ āĻāĻŽāύ āĻāĻ•āϟāĻŋ āĻŦāĻ¸ā§āϤ⧁ āϝāĻž āĻŦāĻŋāĻŽā§‚āĻ°ā§āϤ RecyclerView.ItemAnimator āĻ•ā§āϞāĻžāϏ āĻĒā§āϰāϏāĻžāϰāĻŋāϤ āĻ•āϰ⧇āĨ¤ āĻĄāĻŋāĻĢāĻ˛ā§āϟāϰ⧂āĻĒ⧇, RecyclerView āĻ…ā§āϝāĻžāύāĻŋāĻŽā§‡āĻļāύ āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰāϤ⧇ DefaultItemAnimator āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇āĨ¤ āφāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻ•āĻžāĻ¸ā§āϟāĻŽ āĻ…ā§āϝāĻžāύāĻŋāĻŽā§‡āĻļāύ āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰāϤ⧇ āϚāĻžāύ, āφāĻĒāύāĻŋ RecyclerView.ItemAnimator āĻĒā§āϰāϏāĻžāϰāĻŋāϤ āĻ•āϰ⧇ āφāĻĒāύāĻžāϰ āύāĻŋāϜāĻ¸ā§āĻŦ āĻ…ā§āϝāĻžāύāĻŋāĻŽā§‡āϟāϰ āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āϏāĻ‚āĻœā§āĻžāĻžāϝāĻŧāĻŋāϤ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤

āϤāĻžāϞāĻŋāĻ•āĻž-āφāχāĻŸā§‡āĻŽ āύāĻŋāĻ°ā§āĻŦāĻžāϚāύ āϏāĻ•ā§āώāĻŽ āĻ•āϰ⧁āύ

recyclerview-selection āϞāĻžāχāĻŦā§āϰ⧇āϰāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āĻĻ⧇āϰ āĻ¸ā§āĻĒāĻ°ā§āĻļ āĻŦāĻž āĻŽāĻžāωāϏ āχāύāĻĒ⧁āϟ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻāĻ•āϟāĻŋ RecyclerView āϤāĻžāϞāĻŋāĻ•āĻžāϰ āφāχāĻŸā§‡āĻŽ āύāĻŋāĻ°ā§āĻŦāĻžāϚāύ āĻ•āϰāϤ⧇ āĻĻ⧇āϝāĻŧāĨ¤ āĻāϟāĻŋ āφāĻĒāύāĻžāϕ⧇ āĻāĻ•āϟāĻŋ āύāĻŋāĻ°ā§āĻŦāĻžāϚāĻŋāϤ āφāχāĻŸā§‡āĻŽā§‡āϰ āĻ­āĻŋāĻœā§āϝ⧁āϝāĻŧāĻžāϞ āωāĻĒāĻ¸ā§āĻĨāĻžāĻĒāύāĻžāϰ āωāĻĒāϰ āύāĻŋāϝāĻŧāĻ¨ā§āĻ¤ā§āϰāĻŖ āĻŦāϜāĻžāϝāĻŧ āϰāĻžāĻ–āϤ⧇ āĻĻ⧇āϝāĻŧāĨ¤ āφāĻĒāύāĻŋ āύāĻŋāĻ°ā§āĻŦāĻžāϚāύ āφāϚāϰāĻŖ āύāĻŋāϝāĻŧāĻ¨ā§āĻ¤ā§āϰāĻŖāĻ•āĻžāϰ⧀ āύ⧀āϤāĻŋāϗ⧁āϞāĻŋāϰ āωāĻĒāϰ āύāĻŋāϝāĻŧāĻ¨ā§āĻ¤ā§āϰāĻŖāĻ“ āϰāĻžāĻ–āϤ⧇ āĻĒāĻžāϰ⧇āύ, āϝ⧇āĻŽāύ āϕ⧋āύ āφāχāĻŸā§‡āĻŽāϗ⧁āϞāĻŋ āύāĻŋāĻ°ā§āĻŦāĻžāϚāύ⧇āϰ āϜāĻ¨ā§āϝ āϝ⧋āĻ—ā§āϝ āĻāĻŦāĻ‚ āĻ•āϤāϗ⧁āϞāĻŋ āφāχāĻŸā§‡āĻŽ āύāĻŋāĻ°ā§āĻŦāĻžāϚāύ āĻ•āϰāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

āĻāĻ•āϟāĻŋ RecyclerView āωāĻĻāĻžāĻšāϰāϪ⧇ āύāĻŋāĻ°ā§āĻŦāĻžāϚāύ āϏāĻŽāĻ°ā§āĻĨāύ āϝ⧋āĻ— āĻ•āϰāϤ⧇, āĻāχ āĻĒāĻĻāĻ•ā§āώ⧇āĻĒāϗ⧁āϞāĻŋ āĻ…āύ⧁āϏāϰāĻŖ āĻ•āϰ⧁āύ:

  1. āϕ⧋āύ āύāĻŋāĻ°ā§āĻŦāĻžāϚāύ āϕ⧀ āϧāϰāύ⧇āϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āϤāĻž āύāĻŋāĻ°ā§āϧāĻžāϰāĻŖ āĻ•āϰ⧁āύ, āϤāĻžāϰāĻĒāϰ āĻāĻ•āϟāĻŋ ItemKeyProvider āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύāĨ¤

    āφāĻĒāύāĻŋ āύāĻŋāĻ°ā§āĻŦāĻžāϚāĻŋāϤ āφāχāĻŸā§‡āĻŽ āϏāύāĻžāĻ•ā§āϤ āĻ•āϰāϤ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ āϤāĻŋāύāϟāĻŋ āĻŽā§‚āϞ āĻĒā§āϰāĻ•āĻžāϰ āφāϛ⧇:

    • Parcelable āĻāĻŦāĻ‚ āĻāϰ āϏāĻžāĻŦāĻ•ā§āϞāĻžāϏ, āϝ⧇āĻŽāύ Uri
    • String
    • Long

    āύāĻŋāĻ°ā§āĻŦāĻžāϚāύ-āϕ⧀ āĻĒā§āϰāĻ•āĻžāϰ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āĻŦāĻŋāĻ¸ā§āϤāĻžāϰāĻŋāϤ āϤāĻĨā§āϝ⧇āϰ āϜāĻ¨ā§āϝ, SelectionTracker.Builder āĻĻ⧇āϖ⧁āύāĨ¤

  2. ItemDetailsLookup āĻĒā§āϰāϝāĻŧā§‹āĻ— āĻ•āϰ⧁āύāĨ¤
  3. ItemDetailsLookup āĻāĻ•āϟāĻŋ MotionEvent āĻĒā§āϰāĻĻāĻ¤ā§āϤ RecyclerView āφāχāĻŸā§‡āĻŽ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āύāĻŋāĻ°ā§āĻŦāĻžāϚāύ āϞāĻžāχāĻŦā§āϰ⧇āϰāĻŋ āϤāĻĨā§āϝ āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āĻ•āϰāϤ⧇ āĻĻ⧇āϝāĻŧāĨ¤ āĻāϟāĻŋ āĻ•āĻžāĻ°ā§āϝāĻ•āϰāĻ­āĻžāĻŦ⧇ ItemDetails āĻĻ⧃āĻˇā§āϟāĻžāĻ¨ā§āϤāϗ⧁āϞāĻŋāϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āĻĢā§āϝāĻžāĻ•ā§āϟāϰāĻŋ āϝāĻž āĻāĻ•āϟāĻŋ RecyclerView.ViewHolder āωāĻĻāĻžāĻšāϰāĻŖ āĻĻā§āĻŦāĻžāϰāĻž āĻŦā§āϝāĻžāĻ• āφāĻĒ āĻ•āϰāĻž āĻšāϝāĻŧ āĻŦāĻž āϏ⧇āĻ–āĻžāύ āĻĨ⧇āϕ⧇ āĻŦ⧇āϰ āĻ•āϰāĻž āĻšāϝāĻŧ⧎

  4. āφāχāĻŸā§‡āĻŽ āφāĻĒāĻĄā§‡āϟ āĻ•āϰ⧁āύ RecyclerView āϤ⧇ āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ View āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āϏ⧇āϗ⧁āϞāĻŋ āύāĻŋāĻ°ā§āĻŦāĻžāϚāύ āĻ•āϰ⧇āύ āĻŦāĻž āĻ…āύāĻŋāĻ°ā§āĻŦāĻžāϚāύ āĻ•āϰ⧇āύ āĻ•āĻŋāύāĻž āϤāĻž āĻĒā§āϰāϤāĻŋāĻĢāϞāĻŋāϤ āĻ•āϰāϤ⧇āĨ¤

    āύāĻŋāĻ°ā§āĻŦāĻžāϚāύ āϞāĻžāχāĻŦā§āϰ⧇āϰāĻŋ āύāĻŋāĻ°ā§āĻŦāĻžāϚāĻŋāϤ āφāχāĻŸā§‡āĻŽāϗ⧁āϞāĻŋāϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āĻĄāĻŋāĻĢāĻ˛ā§āϟ āĻ­āĻŋāĻœā§āϝ⧁āϝāĻŧāĻžāϞ āϏāĻœā§āϜāĻž āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰ⧇ āύāĻžāĨ¤ āφāĻĒāύāĻŋ onBindViewHolder() āĻĒā§āϰāϝāĻŧā§‹āĻ— āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ āĻāϟāĻŋ āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰ⧁āύāĨ¤ āφāĻŽāϰāĻž āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āĻĒāĻĻā§āϧāϤāĻŋāϰ āϏ⧁āĻĒāĻžāϰāĻŋāĻļ:

    • onBindViewHolder() -āĻ, setActivated() — āϏ⧇āϟ āύāĻž āĻ•āϰ⧇ setSelected() — View āĻŦāĻ¸ā§āϤ⧁āϟāĻŋāϤ⧇ true āĻŦāĻž false āϏāĻš āĻ•āϞ ​​āĻ•āϰ⧁āύ, āφāχāĻŸā§‡āĻŽāϟāĻŋ āύāĻŋāĻ°ā§āĻŦāĻžāϚāĻŋāϤ āĻ•āĻŋāύāĻž āϤāĻžāϰ āωāĻĒāϰ āύāĻŋāĻ°ā§āĻ­āϰ āĻ•āϰ⧇āĨ¤
    • āϏāĻ•ā§āϰāĻŋāϝāĻŧ āĻ¸ā§āĻĨāĻŋāϤāĻŋ āωāĻĒāĻ¸ā§āĻĨāĻžāĻĒāύ āĻ•āϰāϤ⧇ āĻĻ⧃āĻļā§āϝ⧇āϰ āĻ¸ā§āϟāĻžāχāϞāĻŋāĻ‚ āφāĻĒāĻĄā§‡āϟ āĻ•āϰ⧁āύāĨ¤ āφāĻŽāϰāĻž āĻ¸ā§āϟāĻžāχāϞāĻŋāĻ‚ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āϰāĻ™ āϰāĻžāĻœā§āϝ āϤāĻžāϞāĻŋāĻ•āĻž āϏāĻŽā§āĻĒāĻĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻžāϰ āĻĒāϰāĻžāĻŽāĻ°ā§āĻļ āĻĻāĻŋāχāĨ¤
  5. āύāĻŋāĻ°ā§āĻŦāĻžāϚāύ⧇āϰ āωāĻĒāϰ āĻāĻ•āϟāĻŋ āĻ•ā§āϰāĻŋāϝāĻŧāĻž āϏāĻŽā§āĻĒāĻžāĻĻāύ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϕ⧇ āϏāϰāĻžā§āϜāĻžāĻŽ āϏāϰāĻŦāϰāĻžāĻš āĻ•āϰāϤ⧇ ActionMode āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύāĨ¤
  6. āĻāĻ•āϟāĻŋ āύāĻŋāĻ°ā§āĻŦāĻžāϚāύ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāĻŋāϤ āĻšāϞ⧇ āĻŦāĻŋāĻœā§āĻžāĻĒā§āϤāĻŋ āĻĒāĻžāĻ“āϝāĻŧāĻžāϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ SelectionTracker.SelectionObserver āύāĻŋāĻŦāĻ¨ā§āϧāύ āĻ•āϰ⧁āύ⧎ āϝāĻ–āύ āĻāĻ•āϟāĻŋ āύāĻŋāĻ°ā§āĻŦāĻžāϚāύ āĻĒā§āϰāĻĨāĻŽ āϤ⧈āϰāĻŋ āĻ•āϰāĻž āĻšāϝāĻŧ, āϤāĻ–āύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āĻ•āĻžāϛ⧇ āĻāϟāĻŋ āωāĻĒāĻ¸ā§āĻĨāĻžāĻĒāύ āĻ•āϰāϤ⧇ āĻāĻŦāĻ‚ āύāĻŋāĻ°ā§āĻŦāĻžāϚāύ-āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻ•ā§āϰāĻŋāϝāĻŧāĻžāϗ⧁āϞāĻŋ āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰāϤ⧇ ActionMode āĻļ⧁āϰ⧁ āĻ•āϰ⧁āύāĨ¤ āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, āφāĻĒāύāĻŋ ActionMode āĻŦāĻžāϰ⧇ āĻāĻ•āϟāĻŋ āĻĄāĻŋāϞāĻŋāϟ āĻŦā§‹āϤāĻžāĻŽ āϝ⧋āĻ— āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ āĻāĻŦāĻ‚ āύāĻŋāĻ°ā§āĻŦāĻžāϚāύāϟāĻŋ āϏāĻžāĻĢ āĻ•āϰāϤ⧇ āĻŦāĻžāϰ⧇āϰ āĻĒāĻŋāĻ›āύ⧇āϰ āϤ⧀āϰāϟāĻŋ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤ āϝāĻ–āύ āύāĻŋāĻ°ā§āĻŦāĻžāϚāύ āĻ–āĻžāϞāĻŋ āĻšāϝāĻŧ⧇ āϝāĻžāϝāĻŧ-āϝāĻĻāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āĻļ⧇āώāĻŦāĻžāϰ āύāĻŋāĻ°ā§āĻŦāĻžāϚāύāϟāĻŋ āϏāĻžāĻĢ āĻ•āϰ⧇āύ-āĻ…ā§āϝāĻžāĻ•āĻļāύ āĻŽā§‹āĻĄ āĻŦāĻ¨ā§āϧ āĻ•āϰ⧁āύāĨ¤

  7. āϕ⧋āύ⧋ āĻŦā§āϝāĻžāĻ–ā§āϝāĻž āĻ•āϰāĻž āϏ⧇āϕ⧇āĻ¨ā§āĻĄāĻžāϰāĻŋ āĻ•ā§āϰāĻŋāϝāĻŧāĻž āϏāĻŽā§āĻĒāĻžāĻĻāύ āĻ•āϰ⧁āύāĨ¤
  8. āχāϭ⧇āĻ¨ā§āϟ āĻĒā§āϰāĻ•ā§āϰāĻŋāϝāĻŧāĻžāĻ•āϰāĻŖ āĻĒāĻžāχāĻĒāϞāĻžāχāύ⧇āϰ āĻļ⧇āώ⧇, āϞāĻžāχāĻŦā§āϰ⧇āϰāĻŋ āύāĻŋāĻ°ā§āϧāĻžāϰāĻŖ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇ āϝ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āĻāĻ•āϟāĻŋ āφāχāĻŸā§‡āĻŽ āϏāĻ•ā§āϰāĻŋāϝāĻŧ āĻ•āϰāĻžāϰ āĻšā§‡āĻˇā§āϟāĻž āĻ•āϰāϛ⧇āύ, āĻāϟāĻŋ āĻŸā§āϝāĻžāĻĒ āĻ•āϰ⧇, āĻŦāĻž āĻāĻ•āϟāĻŋ āφāχāĻŸā§‡āĻŽ āĻŦāĻž āύāĻŋāĻ°ā§āĻŦāĻžāϚāĻŋāϤ āφāχāĻŸā§‡āĻŽāϗ⧁āϞāĻŋāϰ āϏ⧇āϟ āĻŸā§‡āύ⧇ āφāύāĻžāϰ āĻšā§‡āĻˇā§āϟāĻž āĻ•āϰāϛ⧇āύ⧎ āωāĻĒāϝ⧁āĻ•ā§āϤ āĻļā§āϰ⧋āϤāĻž āύāĻŋāĻŦāĻ¨ā§āϧāύ āĻ•āϰ⧇ āĻāχ āĻŦā§āϝāĻžāĻ–ā§āϝāĻžāϗ⧁āϞāĻŋāϤ⧇ āĻĒā§āϰāϤāĻŋāĻ•ā§āϰāĻŋāϝāĻŧāĻž āϜāĻžāύāĻžāύāĨ¤ āφāϰāĻ“ āϤāĻĨā§āϝ⧇āϰ āϜāĻ¨ā§āϝ, SelectionTracker.Builder āĻĻ⧇āϖ⧁āύāĨ¤

  9. SelectionTracker.Builder āĻĻāĻŋāϝāĻŧ⧇ āϏāĻŦāĻ•āĻŋāϛ⧁ āĻāĻ•āĻ¤ā§āϰāĻŋāϤ āĻ•āϰ⧁āύāĨ¤
  10. āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āωāĻĻāĻžāĻšāϰāĻŖ āĻĻ⧇āĻ–āĻžāϝāĻŧ āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āĻāχ āϟ⧁āĻ•āϰāĻž āĻāĻ•āϏāĻžāĻĨ⧇ āϰāĻžāĻ–āĻž:

    āϕ⧋āϟāϞāĻŋāύ

        var tracker = SelectionTracker.Builder(
            "my-selection-id",
            recyclerView,
            StableIdKeyProvider(recyclerView),
            MyDetailsLookup(recyclerView),
            StorageStrategy.createLongStorage())
                .withOnItemActivatedListener(myItemActivatedListener)
                .build()
        

    āϜāĻžāĻ­āĻž

        SelectionTracker tracker = new SelectionTracker.Builder<>(
                "my-selection-id",
                recyclerView,
                new StableIdKeyProvider(recyclerView),
                new MyDetailsLookup(recyclerView),
                StorageStrategy.createLongStorage())
                .withOnItemActivatedListener(myItemActivatedListener)
                .build();
        

    āĻāĻ•āϟāĻŋ SelectionTracker āĻĻ⧃āĻˇā§āϟāĻžāĻ¨ā§āϤ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇, āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒāϟāĻŋāϕ⧇ āĻ…āĻŦāĻļā§āϝāχ āĻāĻ•āχ RecyclerView.Adapter āϏāϰāĻŦāϰāĻžāĻš āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āϝāĻž āφāĻĒāύāĻŋ SelectionTracker.Builder āĻĨ⧇āϕ⧇ RecyclerView āφāϰāĻŽā§āĻ­ āĻ•āϰāϤ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇āύāĨ¤ āĻāχ āĻ•āĻžāϰāϪ⧇, āφāĻĒāύāĻŋ SelectionTracker āχāĻ¨ā§āϏāĻŸā§āϝāĻžāĻ¨ā§āϏ āϤ⧈āϰāĻŋ āĻ•āϰāĻžāϰ āĻĒāϰ⧇, āĻāϟāĻŋ āφāĻĒāύāĻžāϰ RecyclerView.Adapter āĻ āχāύāĻœā§‡āĻ•ā§āϟ āĻ•āϰ⧁āύāĨ¤ āĻ…āĻ¨ā§āϝāĻĨāĻžāϝāĻŧ, āφāĻĒāύāĻŋ onBindViewHolder() āĻĒāĻĻā§āϧāϤāĻŋ āĻĨ⧇āϕ⧇ āĻāĻ•āϟāĻŋ āφāχāĻŸā§‡āĻŽā§‡āϰ āύāĻŋāĻ°ā§āĻŦāĻžāϚāĻŋāϤ āĻ¸ā§āĻĨāĻŋāϤāĻŋ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŦ⧇āύ āύāĻžāĨ¤

  11. āĻ•āĻžāĻ°ā§āϝāĻ•āϞāĻžāĻĒ āĻœā§€āĻŦāύāϚāĻ•ā§āϰ āχāϭ⧇āĻ¨ā§āϟ āύāĻŋāĻ°ā§āĻŦāĻžāϚāύ āĻ…āĻ¨ā§āϤāĻ°ā§āϭ⧁āĻ•ā§āϤ.
  12. āĻ…ā§āϝāĻžāĻ•ā§āϟāĻŋāĻ­āĻŋāϟāĻŋ āϞāĻžāχāĻĢāϏāĻžāχāϕ⧇āϞ āχāϭ⧇āĻ¨ā§āϟ āϜ⧁āĻĄāĻŧ⧇ āύāĻŋāĻ°ā§āĻŦāĻžāϚāύ⧇āϰ āĻ…āĻŦāĻ¸ā§āĻĨāĻž āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰāϤ⧇, āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒāϟāĻŋāϕ⧇ āĻ…āĻŦāĻļā§āϝāχ āĻ…ā§āϝāĻžāĻ•ā§āϟāĻŋāĻ­āĻŋāϟāĻŋāϰ onSaveInstanceState() āĻāĻŦāĻ‚ onRestoreInstanceState() āĻĒāĻĻā§āϧāϤāĻŋāϗ⧁āϞāĻŋ āĻĨ⧇āϕ⧇ āύāĻŋāĻ°ā§āĻŦāĻžāϚāύ āĻŸā§āĻ°ā§āϝāĻžāĻ•āĻžāϰ⧇āϰ onSaveInstanceState() āĻāĻŦāĻ‚ onRestoreInstanceState() āĻĒāĻĻā§āϧāϤāĻŋāϤ⧇ āĻ•āϞ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤ āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒāϟāĻŋāϕ⧇ āĻ…āĻŦāĻļā§āϝāχ SelectionTracker.Builder āĻ•āύāĻ¸ā§āĻŸā§āϰāĻžāĻ•ā§āϟāϰāϕ⧇ āĻāĻ•āϟāĻŋ āĻ…āύāĻ¨ā§āϝ āύāĻŋāĻ°ā§āĻŦāĻžāϚāύ āφāχāĻĄāĻŋ āϏāϰāĻŦāϰāĻžāĻš āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤ āĻāχ āφāχāĻĄāĻŋāϟāĻŋ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āĻ•āĻžāϰāĻŖ āĻāĻ•āϟāĻŋ āĻ•āĻžāĻ°ā§āϝāĻ•āϞāĻžāĻĒ āĻŦāĻž āĻāĻ•āϟāĻŋ āĻ–āĻŖā§āĻĄā§‡āϰ āĻāĻ•āĻžāϧāĻŋāĻ• āĻ¸ā§āĻŦāϤāĻ¨ā§āĻ¤ā§āϰ, āύāĻŋāĻ°ā§āĻŦāĻžāϚāύāϝ⧋āĻ—ā§āϝ āϤāĻžāϞāĻŋāĻ•āĻž āĻĨāĻžāĻ•āϤ⧇ āĻĒāĻžāϰ⧇, āϝāĻžāϰ āϏāĻŦāĻ•āϟāĻŋ āϤāĻžāĻĻ⧇āϰ āϏāĻ‚āϰāĻ•ā§āώāĻŋāϤ āĻ…āĻŦāĻ¸ā§āĻĨāĻžāϝāĻŧ āϟāĻŋāϕ⧇ āĻĨāĻžāĻ•āϤ⧇ āĻšāĻŦ⧇āĨ¤

āĻ…āϤāĻŋāϰāĻŋāĻ•ā§āϤ āϏāĻŽā§āĻĒāĻĻ

āĻ…āϤāĻŋāϰāĻŋāĻ•ā§āϤ āϤāĻĨā§āϝ⧇āϰ āϜāĻ¨ā§āϝ āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āϰ⧇āĻĢāĻžāϰ⧇āĻ¨ā§āϏ āĻĻ⧇āϖ⧁āύ.