Kotlin으로 Android의 View Holder 모드를 잘 썼어요.

8816 단어 AndroidKotlin

동기


Android의 ListView 등에서 사용하는 View Holder 모드를 Java로 직접 Kotlin으로 쓰면 왠지 기분이 안 좋은 코드가 될 것 같아서 잘 쓸 수 있을지 생각해 보세요.

해보다


Java 버전


여기서 소개한 View Holder 모드를 바탕으로 Kotlin 코드로 좋은 느낌을 만들어 보세요.
HogeAdapter.java
@Override
public View getView(int position, View convertView, ViewGroup parent) {

    ViewHolderItem viewHolder;
    if(convertView==null){
        LayoutInflater inflater = ((Activity) mContext).getLayoutInflater();
        convertView = inflater.inflate(layoutResourceId, parent, false);
        viewHolder = new ViewHolderItem();
        viewHolder.textViewItem = (TextView) convertView.findViewById(R.id.textViewItem);
        convertView.setTag(viewHolder);
    }else{
        viewHolder = (ViewHolderItem) convertView.getTag();
    }

    ObjectItem objectItem = data[position];
    if(objectItem != null) {
        viewHolder.textViewItem.setText(objectItem.itemName);
        viewHolder.textViewItem.setTag(objectItem.itemId);
    }

    return convertView;

}

Kotlin 버전


Kotlin으로 자바 버전을 고치면 var 를 사용하는 재대입 코드가 될 수 있습니다.
Kotlin에서는 val 간단하게final의 변수를 표시할 수 있다.
어렵기 때문에, 나는 그것을 사용하는 쪽으로 가지고 가고 싶다.Pair로 잘 쓸 수 있을까요?
HogeAdapter.kt
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
    val (viewHolder, view) = if(convertView == null) {
        val inflater = (context as Activity).getLayoutInflater()
        val view = inflater.inflate(layoutResourceId, parent, false)
        val viewHolder = ViewHolderItem()
        viewHolder.textViewItem = view.findViewById(R.id.textViewItem) as TextView
        view.setTag(viewHolder)
        Pair(viewHolder, view)
    } else {
        Pair(convertView.tag, convertView)
    }

    val objectItem = data[position]
    if (objectItem != null) {
        viewHolder.textViewItem.text = objectItem.itemName
        viewHolder.textViewItem.tag = objectItem.itemId
    }

    return view
}

// 動作確認していないので動くかわからない…
아니요varViewHolder 모드를 쓸 수 있습니다
또 다른 좋은 글쓰기가 있으면 알려주세요.

참고 자료


https://www.javacodegeeks.com/2013/09/android-viewholder-pattern-example.html
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-pair/

좋은 웹페이지 즐겨찾기