Jetpack Compose의 TextField (EditText)에 대한 다양한 [Android Kotlin]

소개



Jetpack Compose의 EditText적 존재 TextField의 기본적인 것을 써 갑니다.
만지기 시작한 그 날에 쓰고 있기 때문에 정정해야 할 점 등 있으면 코멘트 부탁드립니다!
참고
htps : //로 ゔぇぺぺr. 안 d로이 d. 코 m / 지 t 파 ck / 코 m 포세 / s 갓 # s 갓
htps //w w. 요츠베. 이 m/와 tch? v = 오_도 P5f 주

그럼 빨리



MainAcitvity.kt
@Composable
fun textField(){
    TextField(
        value = "キョン",
        onValueChange = {}
    )
}

TextField()로 TextField를 기동해 인수로 여러가지 설정해 가는 형태군요.
value → TextField의 값을 설정
onValueChange → TextField의 값의 변화를 받는다
라는 역할이 있습니다.

문제점 1 TextField 값을 편집할 수 없음



MainActivity.kt
@Composable
fun textField(){
    val fieldValue = remember { mutableStateOf("キョン") }
    TextField(
        value = fieldValue.value,
        onValueChange = { newValue ->
            fieldValue.value = newValue
        })
}

이제 사용자가 값을 편집할 수 있습니다! onValueChange에서 TextField의 값에 변화가 있으면 값을 얻어 fieldValue에 대입. value에 fieldValue를 대입으로 TextField의 값이 바뀐다. 라는 느낌입니다.
remember(), mutableStateOf() 는 정직 분위기에서 사용하고 있어, 어떻게 일하고 있는지 설명할 수 없기 때문에 공식의 링크를 붙여 둡니다. htps : //에서 ゔぇぺぺr. 안 d로이 d. 코 m / 지 t 파 CK / 코 m 포세 / s 갓 # s 갓

문제점 2 화면 회전하면 값이 리셋됨



ViewModel은 화면이 회전해도 값을 유지해 주므로 ViewModel을 사용하여 해결해 갑니다.

MainViewModel.kt
class MainViewModel: ViewModel() {
    val query = mutableStateOf("キョン")

    fun onQueryChanged(newValue: String){
        query.value = newValue
    }
}

MainActivity.kt
@Composable
    fun textField() {
        val fieldValue = viewModel.query.value

                TextField(value = fieldValue,
                    onValueChange = { newValue ->
                        viewModel.onQueryChanged(newValue)
                    })
    }

ViewModel의 query를 참조해 TextField에 대입한다.
ViweModel 내에서 query 값을 업데이트하는 함수를 정의하고 MainActivity onValueChange에서 함수를 호출합니다.
이 두 가지로 화면이 회전해도 값이 리셋되지 않는 TextField를 할 수 있습니다!
또 ViewModel에 값을 저장해 두면 Button을 누르면 TextField의 값을 취득하는 것도 간단하게 구현할 수 있네요.
@Composable
fun Button() {
    Button(
        onClick = {  
         println(viewModel.query.value)
 },
    ) {
        Text("Button")
    }
}

이상



좋은 웹페이지 즐겨찾기