안드로이드 edittext 값 가져오기 코틀린 - andeuloideu edittext gabs gajyeoogi koteullin

// 로그인 버튼 이벤트
fun clickLoginBtn(){
login_Btn.setOnClickListener{
inputUserId = login_User_Id.text.toString() // 위젯 아이디.text를 통해서 값을 가지고 온다.
Toast.makeText(this, inputUserId, Toast.LENGTH_SHORT).show()
}
}

inputUserId = login_User_Id.text.toString()

(8) 안드로이드 코틀린 editText값 다른 액티비티로 넘기기

안드로이드 edittext 값 가져오기 코틀린 - andeuloideu edittext gabs gajyeoogi koteullin
kimjongwoo20032020. 7. 17. 23:34

오늘은 Main에서 받은 EditText값을 Main2로 넘겨서 출력시키는 것을 할것입니다.

일단 MainActivity와 MainActivity2를 만들어 주시구요,

MainActivity에는 EditText하나와 액티비티를 넘길 수 있는 버튼 하나를 넣어 줍니다.

MainActivity2에는 MAin에서 입력받은 값을 출력시키는 TextView를 하나 넣어줍니다.

모든 준비가 완료되었으면, MainActivity.kt에서 코드를 작성해 줍시다

class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) button.setOnClickListener{ var intent = Intent(this, MainActivity2::class.java) intent.putExtra("name", EditText1.text.toString()) startActivity(intent) } } }

위 코드를 해석하면 button을 클릭했을때, MainActivity2로 이동하면서 EditText1에 있는 내용을 Extra에 저장한뒤, 네임값을 name으로 설정하고 String으로 형변환을 해줍니다.

그리고 데이터를 받는 MainActivity2로 이동한뒤의 내용을 작성해 줍시다.

class MainActivity2 : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main2) if(intent.hasExtra("name")){ textView.text=intent.getStringExtra("name") } } }

위 코드를 해석하면, 만약에 Extra값에 "name"이라는 네임값이 있다면, textView에 그 네임값의 내용을 저장해줍니다.

감사합니다

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <EditText
        android:id="@+id/et1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="name"
        android:inputType="text"
        android:imeOptions="actionDone" />

    <TextView
        android:id="@+id/tv1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

    <Button
        android:id="@+id/btn1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="값 가져오기"/>

    <Button
        android:id="@+id/btn2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="값 설정정하기"/>

</LinearLayout>
class MainActivity : AppCompatActivity() {

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

        // 1. EditText의 문자열을 TextView로 가져오기
        btn1.setOnClickListener { view ->
            tv1.text = et1.text
        }

        // 2. 문자열을 세팅할 때는 setText를 사용한다.
        btn2.setOnClickListener { view ->
            et1.setText("문자열")
        }

        // 3. 이너 클래스 리스너를 이용해서 setOnEditorActionListener를 사용하는 방법
        var listener = EnterListener()
        et1.setOnEditorActionListener(listener)

        // 4. 람다식을 이용해서 setOnEditorActionListener를 사용하는 방법
        et1.setOnEditorActionListener { textView, i, keyEvent ->
            tv1.text = et1.text
            true // 람다식에서는 반환값을 이렇게.. return을 쓰지 않는다. 중요!!
        }

        // 5. 이너 클래스 리스너를 이용해서 Editwatcher를 사용하는 방법
        var watcher = Editwatcher()
        et1.addTextChangedListener(watcher)

        // 6. 람다식을 이용해서 Editwatcher를 사용하는 방법
        et1.addTextChangedListener(object : TextWatcher {
            override fun afterTextChanged(p0: Editable?) {

            }

            override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
                tv1.text = p0
            }

            override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {

            }

        })
    }

    // 3. 이너 클래스 리스너를 이용해서 setOnEditorActionListener를 사용하는 방법
    inner class EnterListener : TextView.OnEditorActionListener {
        override fun onEditorAction(p0: TextView?, p1: Int, p2: KeyEvent?): Boolean {
            tv1.text = et1.text

            // 키보드 안내리겠다 하면
            // return true
            // 키도브 내리겠다고 하면
            return false
        }
    }

    // 5. 이너 클래스 리스너를 이용해서 Editwatcher를 사용하는 방법
    inner class Editwatcher : TextWatcher {
        // 문자열이 바뀌기 전
        override fun afterTextChanged(p0: Editable?) {

        }

        // 문자열이 바뀌었을 때, 주로 이걸 사용한다.
        override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
            // p0는 에디트 텍스트에 들어온 문자열이다.
            tv1.text = p0
        }

        // 문자열이 바뀐 후
        override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {

        }

    }
}

각각에 주석을 달아놨지만 EditText는 사용법이 다양하다. 버튼을 이용해서 입력받은 문자열을 처리할 수도 있지만, imeOptions을 사용해서 입력키패드에 있는 엔터버튼을 사용해서 값을 처리할 수도 있다. 

    // 3. 이너 클래스 리스너를 이용해서 setOnEditorActionListener를 사용하는 방법
    inner class EnterListener : TextView.OnEditorActionListener {
        override fun onEditorAction(p0: TextView?, p1: Int, p2: KeyEvent?): Boolean {
            tv1.text = et1.text

            // 키보드 안내리겠다 하면
            return true
            // 키도브 내리겠다고 하면
            return false
        }
    }

위 와 같이 imeOptions를 이용할 때 만약 엔터를 누르고 키보드를 내리고 싶다하면 false 반대라면 true를 return 하면 된다.

        // 4. 람다식을 이용해서 setOnEditorActionListener를 사용하는 방법
        et1.setOnEditorActionListener { textView, i, keyEvent ->
            tv1.text = et1.text
            true // 람다식에서는 반환값을 이렇게.. return을 쓰지 않는다. 중요!!
        }

이 람다식의 경우에 자바와 다르게 return 을 쓰지 않는다는 점을 유의하자. 

그 외에 TextWatcher를 통해서 EditText를 감시하면서 반응이 감지(?) 되었을 때 해당하는 때에 로직을 구현 하는 방법도 가능하다. 

궁금하신 점은 덧글로 남겨주세요.