클릭 한 항목의 ID를 가져와야합니다. 그래서 bindView에서 holder.layout.setTag (id)를 통해 viewHolder로 id를 설정하고 onClick에서 view.getTag를 통해이 값을 얻습니다. 이 코드는 그냥 실행할 때 잘 동작하지만 몇 가지 항목의 응용 프로그램 크래시 및 로그에서 스크롤 할 때 bindView의 ClassCastException javaLanString을 볼 수 있습니다. 따라서 setTag 및 getTag 코드가 완벽하지 않으면 완벽하게 작동합니다. 몇 시간 후에 나는 ClassCastException을 얻는 이유를 알아 내려고 노력하지만 대답을 찾지 못했습니다. 아이디어가 있습니까?CursorAdapter에서 스크롤하면 충돌 응용 프로그램이 발생합니다.
@Override
public void bindView(View view, Context context, Cursor cursor) {
ViewHolder holder = (ViewHolder) view.getTag();
String value = cursor.getString(itemId);
Log.i("MINE", value);
holder.layout.setTag(value);
holder.name.setText(cursor.getString(itemName));
holder.country.setText(cursor.getString(itemCountry));
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
View view = inflater.inflate(com.home.R.layout.item_list_row,
parent, false);
ViewHolder holder = new ViewHolder(
(TextView) view.findViewById(com.home.R.id.item_row_name),
(TextView) view.findViewById(com.home.R.id.item_row_population),
(TextView) view.findViewById(com.home.R.id.item_row_country),
(ImageView) view.findViewById(com.home.R.id.icon),
(View) view.findViewById(R.id.row_item));
view.setTag(holder);
view.setOnClickListener(this);
return view;
}
private static final class ViewHolder {
final TextView name;
final TextView population;
final TextView country;
final ImageView icon;
final View layout;
public ViewHolder(TextView name, TextView population, TextView country,
ImageView icon, View layout) {
this.name = name;
this.population = population;
this.country = country;
this.icon = icon;
this.layout = layout;
}
}
편집 : 나는이 줄에 오류 ViewHolder 홀더 = (ViewHolder) view.getTag()를 얻을; 아래에 오류가 발생한 위치를 보여주는 stacktrace를 넣습니다. 09-15 13 : 35 : 21.586 : ERROR/AndroidRuntime (2175) : 치명적인 예외 : 주 09-15 13 : 35 : 21.586 : ERROR/AndroidRuntime (2175) : java.lang .ClassCastException : java.lang.String 09-15 13 : 35 : 21.586 : ERROR/AndroidRuntime (2175) : com.dataart.representation.ItemsAdapter.bindView에서 (ItemsAdapter.java:38) 09-15 13:35 : 21.586 : ERROR/AndroidRuntime (2175) : android.widget.CursorAdapter.getView (CursorAdapter.java:186) 09-15 13 : 35 : 21.586 : ERROR/AndroidRuntime (2175) : android.widget.AbsListView.obtainView (2175) : android.widget.ListView.addViewBelow (ListView.java:2914) 09-15 13 : 35 : 21.586 : ERROR/AndroidRuntime (2175) : 오류/AndroidRuntime (2175) : android.widget.ListView.scrollListItemsBy (ListV (목록 뷰 : .java : 2843) 09-15 13 : 35 : 21.586 : ERROR/AndroidRuntime (2175) : android.widget.ListScrollImpl (ListView.java:2340) 09-15 13 : 35 : 21.586 : ERROR/AndroidRuntime (2175) : android.widget.ListView.arrowScroll (ListView.java:2287) 09-15 13 : 35 : 21.586 : ERROR/AndroidRuntime (2175) : android.widget.ListView.commonKey (ListView.java : 2089) 09-15 13:35:21.586 : ERROR/AndroidRuntime (2175) : android.widget.ListView.onKeyDown (ListView.java:2036) 09-15 13 : 35 : 21.586 : ERROR/AndroidRuntime (2175) : android.view.KeyEvent.dispatch (KeyEvent.java:1256) 09-15 13 : 35 : 21.586 : ERROR/AndroidRuntime (2175) : android.view.View.dispatchKeyEvent (View.java:3855) 09 -15 13 : 35 : 21.586 : ERROR/AndroidRuntime (2175) : android.view.ViewGroup.dispatchKeyEvent (ViewGroup.java:787) 09-15 13 : 35 : 21.586 : ERROR/AndroidRuntime (2175) : android.widget.ListView.dispatchKeyEvent (ListView.java:2021) 09-15 13 : 35 : 21.586 : ERROR/AndroidRuntime (2175) : at android.view.ViewGroup.dispatchKeyEvent (ViewGroup.java:789) 09-15 13 : 35 : 21.586 : ERROR/AndroidRuntime (2175) : android.view.ViewGroup.dispatchKeyEvent (ViewGroup.java:789) 09-15 13 : 35 : 21.586 : ERROR/AndroidRuntime (2175) : android.view.ViewGroup.dispatchKeyEvent (ViewGroup.java:789) 09-15 13 : 35 : 21.586 : ERROR/AndroidRuntime (2175) : android.view. ViewGroup.dispatchKeyEvent (ViewGroup.java:789) 09-15 13 : 35 : 21.586 : ERROR/AndroidRuntime (2175) : at com.android.internal.policy.impl.PhoneWindow $ DecorView.superDispatchKeyEvent (PhoneWindow.java:1687) 09-15 13 : 35 : 21.586 : ERROR/AndroidRuntime (2175) : at com.android.internal.p olicy.impl.PhoneWindow.superDispatchKeyEvent (PhoneWindow.java:1120) 09-15 13 : 35 : 21.586 : ERROR/AndroidRuntime (2175) : android.app.Activity.dispatchKeyEvent (Activity.java:2073) 09-15 13 : 35 : 21.586 : 오류/AndroidRuntime (2175) : com.android.internal.policy.impl.PhoneWindow $ DecorView.dispatchKeyEvent (PhoneWindow.java:1663) 09-15 13 : 35 : 21.586 : ERROR/AndroidRuntime 2175) : android.view.ViewRoot.deliverKeyEventToViewHierarchy (ViewRoot.java:2560) 09-15 13 : 35 : 21.586 : ERROR/AndroidRuntime (2175) : android.view.ViewRoot.handleFinishedEvent (ViewRoot.java:2535) 09-15 13 : 35 : 21.586 : ERROR/AndroidRuntime (2175) : at android.view.ViewRoot.handleMessage (ViewRoot.java:1867) 09-15 13 : 35 : 21.586 : ERROR/AndroidRuntime (2175) : at android.os.Handler.dispatchMessage (Handler.java : 99) 09-15 13 : 35 : 21.586 : ERROR/AndroidRuntime (2175) : android.os.Looper.loop (Looper.java:123) 09-15 13 : 35 : 21.586 : ERROR/AndroidRuntime 2175) : android.app.ActivityThread.main (ActivityThread.java:3647) 09-15 13 : 35 : 21.586 : ERROR/AndroidRuntime (2175) : java.lang.reflect.Method.invokeNative (기본 메소드) 09/13 13 : 35 : 21.586 : ERROR/AndroidRuntime (2175) : java.lang.reflect.Method.invoke (Method.java:507) 09-15 13 : 35 : 21.586 : ERROR/AndroidRuntime (2175) : com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:839) 09-15 13 : 35 : 21.586 : ERROR/AndroidRuntime (2175) : at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:597) 09-15 13 : 35 : 21.586 : ERROR/AndroidRuntime (2175) : at dalvik.system.NativeStart.main (기본 메소드)
스택 추적에서 전체 오류 줄을 제공하고 코드 목록에서 오류가 발생하는 위치를 표시하여 누군가가 실제로 많은 도움을 제공해야합니다. 또한'holder.layout'에'setTag()'를 호출하는 이유를 알지 못합니다 - 일반적으로 홀더 패턴의 일부는 아닙니다. – CommonsWare
답변 해 주셔서 감사합니다. 내 이상한 결정은 어떨까요? 그렇습니다. 당신은 절대적으로 맞습니다. 그러나 나는 이드의 이드를 얻을 필요가 있습니다. 올바른 방법으로 조언하는 방법을 조언 해 줄 수 있습니까? –