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 |