Data Binding 을 이용해서 이벤트를 정의해 보자!!


레이아웃 xml 파일

<data>
<variable
name="user"
type="kr.co.exam.myjetpack.bind.User" />

<variable
name="presenter"
type="kr.co.exam.myjetpack.event.Presenter" />

</data>




버튼을 정의하자

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="event"
android:onClick="@{(view) -> presenter.onSaveClick(view)}"
/>


람다표현식을 사용해서 위에 variable 에 선언한 presenter 의 onSaveClick 에 접근할 수 있다.




Presenter 클래스

public class Presenter {

private Context mContext;
public Presenter(Activity activity) {
this.mContext = activity.getApplicationContext();
}

public void onSaveClick(View view) {
Log.w("DEBUG", "onSaveClicked");

if(mContext != null) {
Toast.makeText(mContext, "onSaveClick~~", Toast.LENGTH_SHORT).show();
}
}
}



MainActivity 에서 아래와 같이 설정을 해주어야 한다.


Presenter 를 생성해서, binding을 해주어야 이벤트가 제대로 동작한다. (이걸 안해줘서 엄청 삽질..

-_-;;)

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

val presenter = Presenter(this)
val binding = DataBindingUtil
.setContentView<DataBindLayoutBinding>(this, R.layout.data_bind_layout)
val user = User("Test", "User")
binding.user = user
binding.presenter = presenter
}


구동화면


'안드로이드 > JetPack' 카테고리의 다른 글

Data Binding  (0) 2018.05.24
Posted by 자바리즘
,