Skip to content

KacperL98/Quizzes

Repository files navigation

Quizzes

Cześć! 👋

Stworzyłem aplikację mobilną z Quizami. Wykorzystałem:

✅API

✅Retrofit

✅Glide

✅ViewBinding

✅Kotlin Coroutines

✅Hilt

✅Architecture Components (LiveData, ViewModel)

✅Room

✅Lottie

Widoki apliakcji

img

Gdy użytkownik będzie offline to wyświetli się poniższy napis, natomiast gdy będzie online to wróci do normalnego stanu i dane załadują się automatycznie. Jeżeli użytkownik przed pierwszym uruchomieniem wyłączy Internet to wyświetli mu się poniższy komunikat. W takim wypadku należy ponownie otworzyć aplikacje 😉

12

Krótki opis losowo wybranych części kodu

1. Pobieranie obrazków

            val url =
                item.mainPhoto.url
                    .replace(
                        "https://filerepo.grupawp.pl/",
                        "http://i.wpimg.pl/" +
                                "${item.mainPhoto.width}x${item.mainPhoto.height}/filerepo.grupawp.pl/"
                    )
            Glide.with(root.context)
                .load(url)
                .centerCrop()
                .transition(DrawableTransitionOptions.withCrossFade())
                .error(R.drawable.quiz_list)
                .into(imgTitleQuiz)

2. Przyciski

Zauważyłem, że Api zwraca różne ilości przycisków. Można ustawić to na sztywno i dodać do każdego przycisku odpowiednią zależność (tak też zrobiłem na początku). Ostatecznie dodałem osobny ViewHolder i Adapter.Według mnie wygląda to znacznie lepiej, niż przy pierwszym pomyśle. Przede wszystkim jest mniej kodu i jest czytelniejszy ✋

Jeżeli skończą się pytania to użytkownik zostanie przeniesiony do fragmentu ScoreQuizFragment

    private val adapter: AnswerAdapter by lazy {
        AnswerAdapter { answer ->
            addPoint(answer)
            if (currentIndex != amountQuestions - 1) {
                currentIndex++
            } else {
                openScoreFragment()
            }
            viewModel.refreshQuestion()
        }
    }

3. Wyświetlanie wyniku w ScoreQuizFragment

Procent dodałem w res-values-strings

    <string name="result"> %s%%</string>

Kiedy odpowiedź jest poprawna to zwraca z Api +1 pkt

       private fun addPoint(answer: Answer) {
        if (answer.isCorrect != 0) {
            correctPoints += answer.isCorrect
        }
    }

Następnie przekazuję wartość w nawigacji

    private fun openScoreFragment() {
        val result = (correctPoints * 100) / amountQuestions
        findNavController().navigate(
            R.id.action_detailsQuizFragment_to_scoreQuizFragment,
            bundleOf("result" to result,
            RESULT_LIST to quizId)
        )
    }

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages