Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Označovanie položky v ListView

Aktivity
Avatar
No Name
Člen
Avatar
No Name:22.3.2020 17:54

Zasekol som sa a neviem ako ďalej.
Mám zadefinovany Listview nasledovne:

<ListView
               android:id="@+id/lvPlaylist"
               android:layout_width="match_parent"
               android:layout_height="120dp"
               android:background="@drawable/customborder_listview"
               android:choiceMode="singleChoice"
               android:listSelector="@android:color/darker_gray"/>

Pri klikani na jednotlivé položky ich pekne zvyrazňuje. Ale chcem, aby som označenú položku mohol programovo nastaviť (napriklad po spusteni aplikacie označená prvá položka). Na to používam funkciu setItemChecked a len pre istotu som skusil použiť aj funkciu setSelection nasledovne:

println("OLD Checked Item: " + lvPlaylist.checkedItemPosition.toString())

lvPlaylist.setItemChecked(1,true)
lvPlaylist.setSelection(1)

println("NEW Checked Item: " + lvPlaylist.checkedItemPosition.toString())

checkedItemPosition mi vráti novú hodnotu označenej položky. Lenže neviem donutiť ListView, aby ju aj zvyraznil tak, ako by som na nu realne klikol. Ak na položku kliknem, zvyrazni mi ju a následne prevedie zadefinovanú akciu v obsluhe udalostí. Ale ak to skúšam programovo, tak

Vie ma niekto nasmerovať, kde robim chybu?

Zkusil jsem: Prešiel som už kopu príspevkov vo fórach. Viem, že ListView musí byť v režime CHOICE_MODE_SINGLE (jednotlivá voľba položky). Tiež viem, že to nemôžem označovať v onCreate aplikácie, ale až po jej skončení - ja to robím po stlačení tlačidla, alebo v onStart aplikácie (po zobrazení).

Skúšal som spravovať pozadie zvolenej položky (setBackgroundCo­lor) cez customAdapter toho ListView v getView metóde - ale to mi ukazovalo moje zobrazenie a este aj to pôvodné po kliknutí. To nebola správna voľba.

Pokúšal som sa vyvolať udalosť, ako po kliknutí na položku:

lvPlaylist.performItemClick(lvPlaylist.getAdapter().getView(1,null, null),1, lvPlaylist.getAdapter().getItemId(1))

To mi tiež nefungovalo. Možno pri volaní performItemClick posúvam zlé hodnoty, na fórach boli rôzne variácie na túto funkciu, ale nedokázal som to rozchodiť...

Chci docílit: Predpokladám, že bude možné ovládať listSelector aktivovaný pri definovaní vlastností ListView programovo tak, aby zvýraznilo napr. 1. položku zoznamu tak, ako by som na ňu klikol aj reálne. Asi to bude možné spraviť pomocou spomínaného performItemClick, ale nateraz sa neviem pohnúť... Vyzerá to byť jednoduchá vec a ja už sa s ňou pasujem 3 deň. :(

 
Odpovědět
22.3.2020 17:54
Avatar
No Name
Člen
Avatar
No Name:22.3.2020 18:17

Po po odskúšaní ešte jedného nápadu cez nasledujúce volanie funkcie:

lvPlaylist.performItemClick(lvPlaylist.getChildAt(1), 1, lvPlaylist.getAdapter().getItemId(1))

Aplikácia zareaguje správne, t.j. vykoná všetko tak, ako by som klikol na položku, ale nezvýrazní ju v ListView.

 
Nahoru Odpovědět
22.3.2020 18:17
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.