Chipgroup liefert falschen Wert für gewählten Chip

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Chipgroup liefert falschen Wert für gewählten Chip

    In meinem Fragment werden oben Chips dargstellt mit Kategorien und darunter eine Recyclerview mit Zutaten.
    Die Chips werden im Observer vom ViewModel dynamisch erstellt und zur Chipgroup hinzugefügt. Auf der Chipgroup liegt ein OnCheckedChangeListener welcher je nach gewählten Chip anhand des Namens die Recyclerview filtert und die zugehörigen Zutaten anzeigt.

    Das Problem besteht darin, dass wenn das Fragment verlassen und wieder neu geöffnet wird die Funktion mir eine falsche ID liefert, mit der ich nichts anfangen kann, da sie nicht in der Range der vorhandenen Chips liegt.

    Die ID verhält sich wie folgt:

    Erster Start des Fragments -> Chip wird gewählt -> ID: 1 (erstes Item gewählt) -> korrekt
    -> Verlassen des Fragments und wieder öffnen -> Chip geewählt -> ID: 10 (erstes Item gewählt) -> ... -> ID: 19.. -> ID:28 .. usw

    Irgendwie wird die ID immer um die Anzahl der vorhandenen Chips erhöht. Bei näherer Untersuchung wird die ID durch die Funktion "getResourceId(@StyleableRed int index, int defValue) ermittelt.

    Hat jemand eine ID wie ich sonst vorgehen kann um die Liste mit den Chips zu filtern oder das Problem zu beheben?


    Fragment Code:

    Java-Quellcode

    1. class BlankFragment2 : Fragment() {
    2. private var ingredientViewModel : IngredientViewModel? = null
    3. private var categoryViewModel : CategoryViewModel? = null
    4. private var adapter : IngredientAdapter? = null
    5. override fun onCreate(savedInstanceState: Bundle?) {
    6. super.onCreate(savedInstanceState)
    7. setHasOptionsMenu(true)
    8. ingredientViewModel = ViewModelProvider(activity!!).get(IngredientViewModel::class.java)
    9. categoryViewModel = ViewModelProvider(activity!!).get(CategoryViewModel::class.java)
    10. adapter = IngredientAdapter(context!!)
    11. }
    12. override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
    13. return inflater.inflate(R.layout.fragment_blank2, container, false)
    14. }
    15. override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    16. super.onViewCreated(view, savedInstanceState)
    17. (activity as AppCompatActivity).setSupportActionBar(bottombar)
    18. (activity as AppCompatActivity).supportActionBar!!.setDisplayHomeAsUpEnabled(true)
    19. setObserver(adapter!!)
    20. rvIngs.adapter = adapter
    21. rvIngs.layoutManager = GridLayoutManager(context, 2)
    22. chipgroup.setOnCheckedChangeListener { p0, p1 ->
    23. if(p1 != -1){
    24. adapter!!.filter.filter((p0[p1-1] as Chip).text)
    25. } else {
    26. adapter!!.filter.filter(null)
    27. }
    28. }
    29. }
    30. private fun setObserver(adapter: IngredientAdapter){
    31. ingredientViewModel!!.getIngs().observe(viewLifecycleOwner, Observer {
    32. adapter!!.setIngCopyList(it)
    33. adapter!!.submitList(it)
    34. })
    35. categoryViewModel!!.getCats().observe(viewLifecycleOwner, Observer {
    36. adapter.setCatCopyList(it)
    37. for (cat in it){
    38. val chip = layoutInflater.inflate(R.layout.chip_style, chipgroup, false) as Chip
    39. chip.text = cat.catName
    40. chip.isCheckable
    41. chip.isClickable
    42. chipgroup.addView(chip)
    43. }
    44. })
    45. }
    46. override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
    47. inflater.inflate(R.menu.ing_bot_menu, menu)
    48. super.onCreateOptionsMenu(menu, inflater)
    49. }
    50. override fun onOptionsItemSelected(item: MenuItem): Boolean {
    51. when (item.itemId) {
    52. android.R.id.home -> findNavController().navigateUp()
    53. }
    54. return super.onOptionsItemSelected(item)
    55. }
    56. }
    Alles anzeigen


    EDIT:
    Habe die Lösung gefunden. Die ID ist nicht zuverlässig, allerdings kann mit "chip.id" oder "chip.tag" eine Zusatzinfo mitgegeben werden, welche dann verwendet werden kann um enstprechend weiterzumache
    n

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Vscholz89 ()