먼저 자바 쪽의 소스 중에 setOnTouchListener는 코드를 이해하기 쉽게 setOnClickListener로 변경해 주세요. 제가 보기에는 OnTouchListener의 역할이 OnClickListener와 같아 보이네요.
convertView.setOnClickListener(new View.SetOnClickListener) {
@Override
public void onClick(View view) {
StandElin.getInstance().SendApr(aprInfo.getName());
closeDialog();
}
});
그리고 제가 테스트 코드를 만들어서 실행해 보니 코드변환에 문제가 있는 것이 아니라 다른 부분에서 문제가 있는 것으로 보입니다. 님의 보여주신 코틀린으로 변환한 부분은 문제가 없어 보여요. 다른 부분을 체크해 보세요.
아래에 테스해 본 코드입니다. 둘다 정확하게 같은 동작을 합니다.
// Java
public class ListViewAdapter extends BaseAdapter {
private final List<DlgAprInfo> aprList;
public ListViewAdapter(List<DlgAprInfo> aprList) {
this.aprList = aprList;
}
@Override
public int getCount() {
return aprList.size();
}
@Override
public Object getItem(int position) {
return aprList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Context context = parent.getContext();
final DlgAprInfo aprInfo = aprList.get(position);
TextView textAprName = null;
TextView textApr = null;
AprItemHolder holder = null;
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.apr_item_view, parent, false);
textAprName = convertView.findViewById(R.id.text_apr_name);
textApr = convertView.findViewById(R.id.text_apr);
holder = new AprItemHolder();
holder.textAprName = textAprName;
holder.textApr = textApr;
convertView.setTag(holder);
} else {
holder = (AprItemHolder) convertView.getTag();
textAprName = holder.textAprName;
textApr = holder.textApr;
}
textAprName.setText(aprInfo.getName());
textApr.setText(aprInfo.getDescription());
convertView.setOnClickListener(v -> {
System.out.println("============ ItemClicked!!!");
});
return convertView;
}
private class AprItemHolder {
public TextView textAprName;
public TextView textApr;
}
}
//Kotlin
class KListAdapter(private val aprList: List<DlgAprInfo>) : BaseAdapter() {
override fun getCount(): Int = aprList.size
override fun getItem(position: Int): DlgAprInfo = aprList[position]
override fun getItemId(position: Int): Long = position.toLong()
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
val aprInfo = getItem(position)
val holderView = convertView ?: LayoutInflater.from(parent.context)
.inflate(R.layout.apr_item_view, parent, false)
val itemHolder = if (holderView.tag == null) {
KAprItemHolder(holderView).also {
holderView.tag = it
}
} else {
holderView.tag as KAprItemHolder
}
itemHolder.bind(aprInfo)
holderView.setOnClickListener {
println("========== ItemClicked!!!")
}
return holderView
}
}
data class KAprItemHolder(val itemView: View) {
private val textAprName: TextView = itemView.findViewById(R.id.text_apr_name)
private val textApr: TextView = itemView.findViewById(R.id.text_apr)
fun bind(aprInfo: DlgAprInfo) {
textAprName.text = aprInfo.name
textApr.text = aprInfo.description
}
}
따라서, 다른 부분을 체크해 보세요. 그리고 코틀린으로 변환하실 때 바로 하지마시고 !! 기호같은 것이 생기지 않도록, 자바코드를 좀 정리하신 다음에 하시는게 좋아요. 자바코드에 @Nullable @NonNull 등의 어노테이션을 가능하면 붙여주신 상태에서 변환을 하세요.