오늘은 자바와 코틀린의 listener 부착에 대해 알아보겠습니다.
현재 코틀린은 View Binding이 적용된 상태입니다.
class Study06 : AppCompatActivity() {
val binding by lazy { ActivityStudy06Binding.inflate(layoutInflater) }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(binding.root)
//바인딩이 적용된상태이다.
버튼이 한두개일때, 익명함수로 만들어서 부착하는게 가장편하다고 알려져있죠.
Kotlin
binding.textView.setOnClickListener {
Log.d("", "하")
}
Java
binding.textView.setOnClickListener {new OnClickListener() {
@Override public void onClick(View v) {
if(v.getId() == R.id.test_btn){
Log.d("", "하")
}
가장 코드가 깔끔해보입니다.
Kotlin
class MainActivity : Activity(), View.OnClickListener{
override fun onClick(v: View?) {
when(v!!.id){
R.id.textView -> Log.d("", "하")
}
}
}
Java
public class MainActivity extends AppCompatActivity implement OnClickListener{
private Button mBtn;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mBtn = (Button) findViewById(R.id.test_btn);
mBtn.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if(v.getId() == R.id.test_btn){
Log.d("", "하")
}
}
2번에 비해 중복 리스너를 만들어낼수있다는 장점이 있습니다.
Kotlin
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(binding.root)
binding.textView.setOnClickListener(listener)
}
val listener = object : View.OnClickListener {
override fun onClick(v: View?) {
when (v!!.id) {
R.id.textView -> Log.d("", "하")
}
}
Java
private Button mBtn;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mBtn = (Button) findViewById(R.id.test_btn);
mBtn.setOnClickListener(mClickListener);
}
private OnClickListener mClickListener = new OnClickListener() {
@Override
public void onClick(View v) {
if(v.getId() == R.id.test_btn){
}
};
상황에따라 선택하시면 될듯 합니다.