반응형
android 작업을 하다보니 위와 같은 error가 나타났서 그 원인을 찾아보았다.
작업 조건은 Listview에 사용되는 adapter를 BaseAdapter로 했을 때,
class TestAdapter(val context: Context) : BaseAdapter()
위와 같은 원인이 발생했습니다.
원인은
override fun getView(position: Int, view: View, parent: ViewGroup?): View {
위의 code에서 view가 원래는 view:View?로 되있었는데 view:View로 변경해서 발생한 원입니다.
생각을 해보니, Java 변수는 언제나 null을 허용하고, Kotlin 변수는 null을 허용치 않는데, 저 getview의 원본을 보면은
public interface Adapter {
int IGNORE_ITEM_VIEW_TYPE = -1;
int NO_SELECTION = -2147483648;
void registerDataSetObserver(DataSetObserver var1);
void unregisterDataSetObserver(DataSetObserver var1);
int getCount();
Object getItem(int var1);
long getItemId(int var1);
boolean hasStableIds();
View getView(int var1, View var2, ViewGroup var3);
int getItemViewType(int var1);
int getViewTypeCount();
boolean isEmpty();
@Nullable
default CharSequence[] getAutofillOptions() {
throw new RuntimeException("Stub!");
}
}
으로 Java 파일 입니다.
즉, null 일 수 있는데 kotlin 코드에서 ? 를 해주지 않아 발생한 문제 입니다.
그냥 android studio에서 BaseAdapter를 상속할 때 생성된 그대로 사용하면 문제가 없을 텐데, 먼가 자체적으로 수정해서 발생한 문제입니다.
반응형
'2023년 이전 > Android' 카테고리의 다른 글
android compileSdkVersion 31 targetSdkVersion 31 and 카카오/네이버 로그인 Manifest error (0) | 2021.12.05 |
---|---|
Navigation을 사용항 경우 fragmentReulst (0) | 2021.12.05 |
FragmentResult (0) | 2021.12.05 |
IllegalArgumentException :cannot add the same observer with different lifecycles & viewLifecycleOwner (0) | 2021.12.05 |
Corutine callbackFlow sendBlocking Deprecated (0) | 2021.12.05 |