연습장/실습

MBTI 테스트_ TestActivity.kt

아이른 2024. 1. 24. 15:59

package com.android.mymbti_test

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import androidx.viewpager2.widget.ViewPager2

class TestActivity : AppCompatActivity() {

1  private lateinit var viewPager: ViewPager2
    val questionnaireResults = QuestionnaireResults()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_test)

2      viewPager = findViewById(R.id.viewPager)

//fineViewById: viewPager layout과 연결
        viewPager.adapter = ViewPagerAdapter(this)

//viewPager.adapter: viewpager에 adepter을 걸어줘야 함

//ViewPagerAdapter(this): ViewPagerAdapter에 FragmentActivity을 넣어줘야 하기 때문에 (this)
        viewPager.isUserInputEnabled = false

//viewPager.isUserInputEnabled: viewPager의 옵션

//화면을 터치로 좌우로 움직이면 새로운 viewpager가 나오는데 그것을 막기 위해 false 

    }

 4 fun moveToNextQuestion() {

//문답을 다 하고 다음 페이지로 넘길 수 있게 하는 코드를 만듦.
        Log.d("jblee","viewPager.currentItem = ${viewPager.currentItem}")

        if (viewPager.currentItem==3) {

//마지막 페이지(3/index는 0부터 시작하기 때문)일 때, 결과 화면으로 이동.
            Log.d("jblee","result = ${ArrayList(questionnaireResults.results)}")
            val intent = Intent(this, ResultActivity::class.java)

//activity_Result.xml 만든 후 연결
            intent.putIntegerArrayListExtra("results", ArrayList(questionnaireResults.results))
            startActivity(intent)

//결과에 대한 화면이 다르기 때문에 그 안에 데이터를 담아줘야함. 
        } else {

//다음 페이지로 이동.
            val nextItem = viewPager.currentItem + 1

//currentItem 현재 페이지 번호 + 1 
            if (nextItem < viewPager.adapter?.itemCount ?: 0) {
                viewPager.setCurrentItem(nextItem, true)

//nextItem이 마지막 페이지를 넘어가지 않게 한번 더 확인.

//다음 페이지로 넘어갈 때, 페이지 스크롤링 허용하기 위해 true
            }
        }
    }
}

3 class QuestionnaireResults {

//질문지에서 받은 응답을 저장하는 공간
     val results = mutableListOf<Int>()


    fun addResponses(responses: List<Int>) {

/**

*첫번째 QuestionFragment의 응답을 하고 다음을 누르면 제일 받은 답변 수가 addResponses가 받음.

*addResponses의 list에서 제일 많은 답변 수(1 or 2/이지선다)가

*1이 많으면 results에 1을 add, 2가 많으면 results에 2를 add하게끔 함.

*/
        val mostFrequent = responses.groupingBy { it }.eachCount().maxByOrNull { it.value }?.key
        mostFrequent?.let { results.add(it) }

/**

*responses.groupingBy: responses에는 답변이 들어가 있음. 그것을 그룹을 묶음.

*eachCount(): 각각 그룹의 답을 카운트.

*maxByOrNull: 카운트의 맥스 값.

*mostFrequent?.let { results.add(it) }: results에 add

*/
    }
}

'연습장 > 실습' 카테고리의 다른 글

MBIT 테스트_ ResultActivity.kt  (1) 2024.01.24
MBTI 테스트_ QuestionFragment.kt  (0) 2024.01.24
MBIT 테스트_ activity_Test.xml  (0) 2024.01.23
MBTI 테스트_ ViewPagerAdapter.kt  (0) 2024.01.23
MBTI 테스트_ MainActivity.kt  (0) 2024.01.23