기타/AOS, Kotlin

앱 개발 프로젝트에서 배운 점(3) : TextView 배열의 원소 증감 처리 및 메인 액티비티로 넘겨주기

kyxxn 2023. 8. 15. 00:50
728x90

순서대로 레이아웃에 아래의 id로 저장되어 있다.

image0 number0 image1

image2 number1 image3

image4 number2 image5

image6 number3 image7

 

프래그먼트간의 데이터를 주고받을 때, EditView 4개도 주고받아야 한다.

그래서 레이아웃의 EditVew id 하나하나당 총 4번으로 데이터를 넘겨주려 했는데,

코드의 가독성이 매우 낮아질 거 같아서 찾아보니 Textview 배열에 담아줄 수 있었다.

  1. 레이아웃에서 EditText 뷰의 아이디를 통일시켜준다.
  2. Textview 배열과 ImageView 배열 초기화
  3. 이미지에 따른 텍스트뷰 증감 처리

레이아웃에서 EditText 뷰의 아이디를 통일

첫 번째 사진의 EditText id 통일

Textview 배열과 ImageView 배열 초기화

  • ImageView 배열 초기화
// Image 뷰 8개를 담을 배열 선언
val imageViews = arrayOfNulls<ImageView>(8)

// 플러스, 마이너스 이미지 배열 초기화
for (i in imageViews.indices) {
    val id = resources.getIdentifier("image$i", "id", context?.packageName)
    imageViews[i] = view.findViewById(id)
}
  • TextView 배열 초기화
// EditText 뷰 4개를 담을 배열 선언
val textViews = arrayOfNulls<TextView>(4)

// 텍스트뷰 4개 배열에 초기화
for (i in textViews.indices) {
    val id = resources.getIdentifier("number$i", "id", context?.packageName)
    textViews[i] = view.findViewById(id)
}

핵심은 레이아웃에서 EditText의 id를 유동적으로 맞춰주는 것이다.
number$i로 처음에 0, 1, 2, 3을 배열에 초기화 시켜준다.

 

이미지에 따른 텍스트뷰 증감 처리

// 플마 이미지에 대한 텍스트뷰 증감 처리
for (i in imageViews.indices) {
    imageViews[i]?.setOnClickListener {
        val index = i.div(2)
        if (index in textViews.indices) {
            textViews[index]?.let {
                var currentValue = it.text.toString().toInt()
                if (i % 2 == 0 && currentValue > 0 && currentValue < 10) {
                    currentValue--
                } else if (i % 2 == 1 && currentValue >= 0 && currentValue < 10) {
                    if(currentValue == 8){
                        currentValue = 0
                    }else{
                        currentValue++
                    }
                }
                it.text = currentValue.toString()
            }
        }
    }
}

val index = i.div(2)

: i를 2로 나누었을 때, 몫이 index 변수에 초기화된다.

즉, image0과 image1에 대해 클릭이 이루어지면 number0이 선택되게끔

i가 2와 3이면 div(2)했을 때, index에 몫 1을 초기화

 

이후 index 변수가 textViews 배열에 들어있으면, 배열 안의 index 원소 값을

it.text.toString().toInt()로 정수값으로 받아온다.

이후, i가 짝수라면 마이너스 이미지이므로 -1

i가 홀수라면 플러스 이미지이므로 +1 한다.

 

그러고 최종적으로 it.text에 toString으로 넣어준다.