A hora de criar LBS para pequenos dispositivos é agora!!
Desenvolvimento de Aplicativos Android com JetPack
1.
2. Projeto e Desenvolvimento de
Aplicações Android
● Três encontros 04/04, 18/04 e 25/04.
● Projeto de aplicações Android.
● Orientações para elaboração de interface de usuário para Android.
● Boas práticas no desenvolvimento móvel e Android.
● Teste de aplicações Android.
● Desenvolvimento Prático.
● Publicação de aplicações Android.
3. Projeto e Desenvolvimento de
Aplicações Android
● Avaliação:
● Conceito C:
○ Apresentação da idéia (04/04)
○ Entrega de uma aplicação com uso de, no mínimo, 3
bibliotecas do Android JetPack (ViewModel, LiveData e
DataBinding)
● Conceito B:
○ Uso de mais 2 pacotes JetPack, sendo um deles o Navigation.
● Conceito A:
○ Uso de mais 2 pacotes JetPack.
4. Projeto e Desenvolvimento de
Aplicações Android
● Foco da Disciplina:
● Android JetPack
● Porém, antes disso, alguma dúvida sobre Android?
7. JetPack
● O Jetpack é um conjunto de bibliotecas, ferramentas e
orientações para ajudar os desenvolvedores a criar apps de alta
qualidade com mais facilidade. Esses componentes ajudam você
a seguir as práticas recomendadas, acabando com os códigos de
texto clichê e simplificando tarefas complexas, para que você
possa se concentrar na parte do código do seu interesse.
● O Jetpack compõe as bibliotecas de pacotes androidx.*,
separadas das APIs da plataforma. Isso significa que ele oferece
compatibilidade com versões anteriores e é atualizado com mais
frequência que a Plataforma Android, garantindo que você sempre
tenha acesso às versões melhores e mais recentes dos
componentes do Jetpack.
https://developer.android.com/jetpack
14. ViewModel, LiveData e DataBinding
● Passo 4) Remover a MainActivity e limpar suas referências.
<application ...>
<activity android:name=".ListaCarros">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
15. ViewModel, LiveData e DataBinding
● Passo 5) Verificar se a criação da ViewModel não está depreciada.
viewModel =
ViewModelProvider(this).get(ListaCarrosViewModel::class.java)
16. ViewModel, LiveData e DataBinding
https://medium.com/androiddevelopers/viewmodels-a-simple-example-ed5ac416317e
17. ViewModel, LiveData e DataBinding
● Passo 5) Provando os conceitos
class ListaCarrosViewModel : ViewModel() {
init {
Log.e("teste", "init viewmodel ${this.toString()}");
}
override fun onCleared() {
super.onCleared()
Log.e("teste", "init onCleared");
}
}
18. ViewModel, LiveData e DataBinding
● Passo 5) Provando os conceitos
class ListaCarrosFragment : Fragment() {
...
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
viewModel =
ViewModelProvider(this).get(ListaCarrosViewModel::class.java)
Log.e("teste", "viewModel ${viewModel.toString()}")
}
}
19. ViewModel, LiveData e DataBinding
● Passo 6) Inserindo dados - criando uma DataClass
data class Car(
val manufacturer: String,
val model: String,
val price: Float,
val photo: String)
37. ViewModel, LiveData e DataBinding
● Passo 14) DataBinding é a mágica final.
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
viewModel = ViewModelProvider(this).get(
DetalheCarroViewModel::class.java)
val binding:
DetalheCarroFragmentBinding =
DataBindingUtil.setContentView(
activity!!,
R.layout.detalhe_carro_fragment)
binding.viewModel = viewModel
viewModel.car = arguments?.getSerializable("car") as Car
}
38. ViewModel, LiveData e DataBinding
● Passo 14) Mudança no adapter.
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
holder.viewRoot.txt_detail.text = "${myDataset[position].model} -
${myDataset[position].manufacturer}"
holder.viewRoot.setOnClickListener {
val intent = Intent(context, DetalheCarro::class.java)
intent.putExtra("car", myDataset[position])
context.startActivity(intent)
}
}
39. ViewModel, LiveData e DataBinding
● Passo 14) Na classe DetalheCarro.
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.detalhe_carro_activity)
val car = intent.getSerializableExtra("car") as Car
if (savedInstanceState == null) {
supportFragmentManager.beginTransaction()
.replace(R.id.container,
DetalheCarroFragment.newInstance(car))
.commitNow()
}
}
40. ViewModel, LiveData e DataBinding
● Passo 14) Na classe DetalheCarroFragment.
companion object {
fun newInstance(car: Car): DetalheCarroFragment {
val f = DetalheCarroFragment()
val args = Bundle()
args.putSerializable("car", car)
f.arguments = args
return f
}
}