Skip to content

Commit

Permalink
[Feat] 데이터바인딩 Step.03 실습
Browse files Browse the repository at this point in the history
Step.03 dataBinding_onClick event

Related to : #2, #6, #9
  • Loading branch information
hyooosong committed Jan 1, 2021
1 parent e6483b8 commit 00e3d84
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 26 deletions.
Original file line number Diff line number Diff line change
@@ -1,45 +1,31 @@
package sotp.semina.practicegitanddatabinding

import android.os.Bundle
import android.widget.EditText
import androidx.appcompat.app.AppCompatActivity
import androidx.databinding.DataBindingUtil
import androidx.databinding.ObservableField
import sotp.semina.practicegitanddatabinding.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {

/* TODO step4 설계 변경이 일어납니다 binding 을 전역 클래스 맴버 변수로 올리고
* 양방향 데이터 바인딩을 위한 ObservableField 를 작성합니다
* 이 과정에서 하단 getEditTextToString이 사라질 수 있습니다.*/
private lateinit var binding: ActivityMainBinding
val editText = ObservableField<String>()

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val binding: ActivityMainBinding =
DataBindingUtil.setContentView(this, R.layout.activity_main)
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
binding.userProfile = UserData(IMAGE_URL, DEFAULT_USER_NAME)
/*TODO step2 엑티비티를 결합하였으므로 binding에 엑티비티를 결합한다.*/
addButtonClickEvent(binding)
binding.mainActivity=this
}

private fun setProfileName(binding: ActivityMainBinding, content: String) {
binding.userProfile = UserData(IMAGE_URL,content)
}

/*TODO step3 해당 함수를 버튼이 클릭 되었을때 어떤 일이 일어날지 수정합시다.
* 필요시 다른 함수를 수정해야함.*/
private fun addButtonClickEvent(binding: ActivityMainBinding) {
binding.buttonProfileChangeButton.setOnClickListener {
setProfileName(
binding,
getEditTextToString(binding.inputChangedProfile)
)
}
fun ChangeUserNameClickEvent() {
setProfileName(binding, editText.get()?: DEFAULT_USER_NAME)
}


private fun getEditTextToString(content: EditText): String = content.text.toString()


companion object {
private const val IMAGE_URL =
"https://avatars3.githubusercontent.com/u/45380072?s=460&u=b9fc82996ec2cc568a7dfcbf8846944dc16a7ccd&v=4"
Expand Down
12 changes: 7 additions & 5 deletions app/src/main/res/layout/activity_main.xml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@
name="userProfile"
type="sotp.semina.practicegitanddatabinding.UserData" />

<!--TODO step1 변수로 Activity를 결합합니다.-->
<variable
name="mainActivity"
type="sotp.semina.practicegitanddatabinding.MainActivity" />
</data>

<androidx.constraintlayout.widget.ConstraintLayout
Expand Down Expand Up @@ -40,7 +42,6 @@
app:layout_constraintTop_toBottomOf="@+id/image_profile_image"
tools:text="profile name" />

<!--TODO step5 양방향 데이터 결합-->
<EditText
android:id="@+id/input_changed_profile"
android:layout_width="match_parent"
Expand All @@ -50,9 +51,9 @@
android:layout_marginEnd="16dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/text_profile_name" />
app:layout_constraintTop_toBottomOf="@+id/text_profile_name"
android:text="@={mainActivity.editText}"/>

<!--TODO step6 결합한 Activity의 함수를 onClick에 결합합니다.-->
<Button
android:id="@+id/button_profile_change_button"
android:layout_width="match_parent"
Expand All @@ -63,7 +64,8 @@
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:text="Change"
app:layout_constraintTop_toBottomOf="@+id/input_changed_profile" />
app:layout_constraintTop_toBottomOf="@+id/input_changed_profile"
android:onClick="@{()->mainActivity.ChangeUserNameClickEvent()}"/>

</androidx.constraintlayout.widget.ConstraintLayout>
</layout>

0 comments on commit 00e3d84

Please sign in to comment.