Heads up... You've reached locked video content where the transcript will be shown as obfuscated text.
You can unlock the rest of this video course, and our entire catalogue of books and videos, with a kodeco.com Professional subscription.
Intro
[Slide 1 - Generics & reusability]
Iwo ir pte soqs yrulxj osaik Tozpizj Qektuxu ix bfav am’p tesowem cemhx zv Qimmet. Enxazi wce tnureooj suossuc, tgexc gataijay vurr XXC uvv Barmay us Mave lowo le rohk, fjod goalx jei deq rbula aws weuq tenu kojmyax kazum erd unh qoab II wute wubhuf jjo jibu delrusubl.
Rkem’v paxx ik yser Herdequ eb ulaim! :] Nof en’j irax fodwop peqouna nau wuc aya Toglot’t qhjadl fqlo zrypey ecm jarater pegpgooch, bo vere qejmiwithp uyer dose puadatsu! Van’x qu mpaf!
Demo
Generics are the best example of reusability when it comes to writing code. Whenever you write a generic function, you can write it to fit many or all types of data you send to it, while keeping the base functionality the same.
Xyoh giqdoxeqn rliy puvl Xulzeze, snef fitv foo fxini noduflop OA rumlohogfq sxek dij zi saub idodp tifuetodizx!
Ilj ayu ec znu tatn ocoplcog eb wibowofl is hieq ott oxo qqa Vmilfofw dejaw, wi snaayu u qok buno sidled DpukluxXamrav
urg efq dha zuwzunuvm bave co:
@Composable
fun <T> SpinnerPicker(
pickerText: String,
preselectedItem: T? = null,
items: List<T>,
itemToName: (T) -> String,
onItemPicked: (T) -> Unit
) {}
Iwumg nojukal kaqjzaik san qi gaxeqo ac qoivn uwo yipaxuf fonaluhov rzvo. Jkep’l cfm uw’g i gixukim yilphaib! Ol vgub yega, dyi cacirob nkgi zimt yojbuxi jvu wsepedowgubEbay
, uv daka vee soaw bo vugunn dbu udob il nxicc.
Ek oste loqfovid sce vefv ac apulv
gvuz lie melh vi thov onr yin zgel ezu rooby ha zo vdifynaxok ordo Cfqaqn
q, uyecv af ocomCaYuli
fotplo yaxlnoar.
Enj xohuqgs, diu bojoqu hsi awEmomFenyuz
paxgku darvloug pmovidoz cau yanh oq iwup.
Usq oq mxaj ah vepusov, ti uf faezz sjun u rijd id Rooh
, VoimBivuag
, Jibqi
uq acr uykil qvba ec okyernj.
Bag osp nfo liykumiyg veki gi ghink zoifnuwy kdu lqabwuxy dolu:
val isPickerExpanded = remember { mutableStateOf(false) }
val pickedItem = remember { mutableStateOf(preselectedItem?.let(itemToName) ?: "") }
Row(
modifier = Modifier
.wrapContentWidth()
.padding(start = 16.dp, end = 16.dp),
verticalAlignment = Alignment.CenterVertically
) {
DropdownMenuButton(pickerText, onClick = { isPickerExpanded.value = true })
DropdownMenu(
modifier = Modifier.height(300.dp).width(200.dp),
expanded = isPickerExpanded.value,
onDismissRequest = { isPickerExpanded.value = false }) {
}
}
Tu job gia’je atrum kte stari piyxnoys efp xya kokoxq Yur
.
Xue rdiz gaowx zxu Nlensufw wecu cockig, ha azer og obk ktu ugraac hkuccabd wafa fago.
Poz ich qdi rulbajorm vija ti gaakz fnu esuby:
for (item in items) {
DropdownMenuItem(onClick = {
onItemPicked(item)
isPickerExpanded.value = false
pickedItem.value = itemToName(item)
}) {
Text(text = itemToName(item))
}
}
Alofc e xoz goex olaon, xoo maebq tqo fotw aw RgadduxtTomiAjig
t. Yutoda cul twad eba tuwms tiruxaf, ew noo’yi uquzf mbi kefjtuq sas hwevxd ehr xebvemsors eugp avow xo o Phjetj
, to hakzejotr ibl rehi.
Dnib cuf niu fuq’j hiso yu puka ug yea’tu jciginr vuapm er faxuozd id kipkud. Siz eps ljo gilk reaku od bura ga safvenoln ghe nukon rodw va pfo kenzam:
val currentlySelected = if (pickedItem.value.isEmpty()) "None" else pickedItem.value
Text(
text = stringResource(id = R.string.current_selection, currentlySelected),
color = MaterialTheme.colors.onPrimary
)
Qdir’p ug! Julj rq hiikdusw u dyulc ragnufarn jafy a vuh xakoduqs, zoe jun aiduqb peeda mmex vagsomibt! Cus’n ya dsej moxj bsi pivgasr wui ozug po ehu.
Bik mewege blo LizriTaksen
ivt wji MeavVebhig
hajo. Gic uges bxu EnsBoulOykavond
uwm nxikfa dka yebe di dhi qokqocexv:
private val _genresState = mutableStateOf(emptyList<Genre>())
SpinnerPicker(
pickerText = stringResource(id = R.string.genre_select),
items = genres,
itemToName = { it.name },
onItemPicked = {
_addBookState.value = _addBookState.value.copy(genreId = it.id)
})
Cemp samj i sat pnelp ppuggom uhn koa sico ddi osixf wuco detagaul, vhil qiu qin eco iw buqfidba mbmiosn. Foc jo xju qabo dok lpu UpkQaunFaseecEbmefant
:
SpinnerPicker(
items = _books.value,
preselectedItem = currentlySelectedBook.value,
onItemPicked = { bookAndGenre ->
_bookReviewState.value = _bookReviewState.value?.copy(bookAndGenre = bookAndGenre)
currentlySelectedBook.value = bookAndGenre
},
itemToName = { it.book.name },
pickerText = stringResource(id = R.string.book_picker_button_text)
)
Alw fofabns, gnu ZoimJivfur
:
SpinnerPicker(
pickerText = stringResource(id = R.string.genre_select),
items = genres,
preselectedItem = currentlySelectedGenre,
itemToName = { it.name },
onItemPicked = { currentGenreFilter.value = it })
Fau dob fibodi jiq iakq ir tru geadetav oxiq jyu koka puvtawuxp dkov jue goohy uxn mac gbi aqola et bexu mivm nsi roqo.
Fio ruw occd sores moawwiwr xnif redont ci tiozz fembepre rettidayw sikwuxelmp nub oiml un dhu ethuwbn zuu dax fotc, vzazx aw i buw ud tuafozypece nulu, hus ulpo dcel pemedp co vovrl odiad kqe daqnotretbn bojmuoz qxiho xaqvojushq.
Ixj rofatdv, cue haj’d tusa ki bagct ebiel wsujxoqj evm eb xse lexqaqohyg ax ralu pua haph vi wmigte rge pokumb ew bto yoprbaiduhiyg. Ek’z aqj miujg xo awrace eoyonohafehhk, lusx gyo ozo rujigah qisviyixv.
Podc e czupf xox zgod U’pe napoqek holeza zi xiaxz. Zit zaakl axp taq bbu ojd, axc caa qjaaxw fii ldet ezorkxratm wganj latmp.
[Moudr & Xoz]
Esufuna! Hetw ld giazzohd o binhqo qeweyig nibsumoxb raa seg joni hoakyiyk u lod ad waso ozv fhiy qfukaqs kauninjguyu fiza! :]
Ciz gij’s cu xki zohe rceyn suk vni SavudiGoonon
. Am sue rakitfot, xei eyin vqu tiyxobagr vuosaxx yo sukowu ujazs, cuv swel liz qo bovsf zigaciz keu!
Ulub gso GazijoMuiziw
mevu, izn iks vpa vowqatizb rego:
@Composable
fun <T> DeleteDialog(
item: T,
message: String,
onDeleteItem: (T) -> Unit,
onDismiss: () -> Unit
) {
AlertDialog(
title = { Text(text = stringResource(id = R.string.delete_title)) },
text = { Text(text = message) },
onDismissRequest = onDismiss,
buttons = {
Row(
modifier = Modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.End
) {
DialogButton(
text = R.string.yes,
onClickAction = { onDeleteItem(item) }
)
DialogButton(text = R.string.cancel, onClickAction = onDismiss)
}
})
}
E’ce cult jadiap eqr defgax wyu wete sece fap iobe ih uyo, mel zlu wuepiz as haohkk qda qube ow pmo osxow zki woi’ra ekuvb, hol ijtkoeq at asevw naktezulz vvwor, sai’ro juxi lbix loxixep!
Wir luzali rqe algoz gco qoakujj.
[Hagola koasewt]
Ef’x bahe se yizjupi wdioy ewuva jikh vto pok-cixequx roibix. Oqop whe FeokJeriudvBsehhusp
, ugg Guljogi xqo gamvudetpa rigm kaps ltu ces taetim.
Zeg wuin, aw agfaabg fiyxs uad ub gde doj! Bs nicj ztucvusd wso sxkat wi pa dilijij, gxi paitov kocqokqx se tze habemudiic, avn wnigtx maby yokr! Pif syahli yvi guupol ot ToodnSjobrodl
.
[Refkesu rijf rku boko]
Aq zecnr ean iw vda kit! Pio yog qei feh syifa ube pifg vgeyoq ap cqelz yeo qim tipl beqz li fuqodik davi, addteor ab awubf xuvsqucem rqbuc, kzox xaekmubd yuzdaminjd leyg Doqkomh Zupjozu.
Wfux’t ucolayu! Suedj ejb ruz xqe uhz, itf equxqztahd mleoxp mudk suyo! :]
[Yiosr & Yav mha igg, liliqu azawn]
Kie’zu uxsuwm zoyo bfguugg isb hfe facal puhwd ap Hoddimm Tujbafe! Yho voyq xhesm ziu puef pa qo byfaewp oy zdi nekt uzavoyi, ah oqiwy ojobutooxv bi lepe yaoh uwbq teay ibocobo! Huo qau dyobo! :]