android - 在CursorAdapter中滚动会导致崩溃应用程序

标签 android

我需要获取一直点击的商品的ID。因此,在bindView中,我通过holder.layout.setTag(id)将id设置为viewHolder,在onClick中,我通过view.getTag获得了该值。当我刚运行它时,此代码运行良好,但是当我在一些项目应用崩溃时开始滚动它时,在日志中,我可以在bindView中看到ClassCastException javaLanString。因此,没有这些setTag和getTag代码就可以完美工作。
几个小时后,我试图弄清楚为什么会出现ClassCastException,但没有找到答案。你有想法吗?

@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;
    }
}


编辑:我在这一行中看到错误ViewHolderholder =(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:错误/ AndroidRuntime(2175):在com.dataart.representation.ItemsAdapter.bindView(ItemsAdapter.java:38)
09-15 13:35:21.586:错误/ AndroidRuntime(2175):位于android.widget.CursorAdapter.getView(CursorAdapter.java:186)
09-15 13:35:21.586:错误/ AndroidRuntime(2175):位于android.widget.AbsListView.obtainView(AbsListView.java:1397)
09-15 13:35:21.586:错误/ AndroidRuntime(2175):位于android.widget.ListView.addViewBelow(ListView.java:2914)
09-15 13:35:21.586:错误/ AndroidRuntime(2175):位于android.widget.ListView.scrollListItemsBy(ListView.java:2843)
09-15 13:35:21.586:错误/ AndroidRuntime(2175):位于android.widget.ListView.arrowScrollImpl(ListView.java:2340)
09-15 13:35:21.586:错误/ AndroidRuntime(2175):位于android.widget.ListView.arrowScroll(ListView.java:2287)
09-15 13:35:21.586:错误/ AndroidRuntime(2175):位于android.widget.ListView.commonKey(ListView.java:2089)
09-15 13:35:21.586:错误/ AndroidRuntime(2175):位于android.widget.ListView.onKeyDown(ListView.java:2036)
09-15 13:35:21.586:错误/ AndroidRuntime(2175):位于android.view.KeyEvent.dispatch(KeyEvent.java:1256)
09-15 13:35:21.586:错误/ AndroidRuntime(2175):位于android.view.View.dispatchKeyEvent(View.java:3855)
09-15 13:35:21.586:错误/ AndroidRuntime(2175):位于android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:787)
09-15 13:35:21.586:错误/ AndroidRuntime(2175):位于android.widget.ListView.dispatchKeyEvent(ListView.java:2021)
09-15 13:35:21.586:错误/ AndroidRuntime(2175):位于android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:789)
09-15 13:35:21.586:错误/ AndroidRuntime(2175):位于android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:789)
09-15 13:35:21.586:错误/ AndroidRuntime(2175):位于android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:789)
09-15 13:35:21.586:错误/ AndroidRuntime(2175):位于android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:789)
09-15 13:35:21.586:错误/ AndroidRuntime(2175):在com.android.internal.policy.impl.PhoneWindow $ DecorView.superDispatchKeyEvent(PhoneWindow.java:1687)
09-15 13:35:21.586:错误/ AndroidRuntime(2175):在com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1120)
09-15 13:35:21.586:错误/ 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:错误/ AndroidRuntime(2175):位于android.view.ViewRoot.deliverKeyEventToViewHierarchy(ViewRoot.java:2560)
09-15 13:35:21.586:错误/ AndroidRuntime(2175):位于android.view.ViewRoot.handleFinishedEvent(ViewRoot.java:2535)
09-15 13:35:21.586:错误/ AndroidRuntime(2175):位于android.view.ViewRoot.handleMessage(ViewRoot.java:1867)
09-15 13:35:21.586:错误/ AndroidRuntime(2175):位于android.os.Handler.dispatchMessage(Handler.java:99)
09-15 13:35:21.586:错误/ AndroidRuntime(2175):位于android.os.Looper.loop(Looper.java:123)
09-15 13:35:21.586:错误/ AndroidRuntime(2175):位于android.app.ActivityThread.main(ActivityThread.java:3647)
09-15 13:35:21.586:ERROR / AndroidRuntime(2175):位于java.lang.reflect.Method.invokeNative(本机方法)
09-15 13:35:21.586:错误/ AndroidRuntime(2175):位于java.lang.reflect.Method.invoke(Method.java:507)
09-15 13:35:21.586:错误/ AndroidRuntime(2175):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:839)
09-15 13:35:21.586:错误/ AndroidRuntime(2175):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
09-15 13:35:21.586:错误/ AndroidRuntime(2175):在dalvik.system.NativeStart.main(本机方法)

最佳答案

您正在使用setTag()调用String,覆盖您先前使用setTag()执行的ViewHolder

您无需使用setTag()调用String。您可以随时通过在_ID上调用getItemId()来获取CursorAdapter值。

如果发现该答案不可接受,则将long id数据成员添加到ViewHolder并将_ID放在此处。

关于android - 在CursorAdapter中滚动会导致崩溃应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7428816/

相关文章:

android - 我如何在android的外部存储库中保存图像

java - NullPointerException: 名称 == null

java - Xposed 未加载我的模块,ClassNotFoundException

android - 更改 Android 开关状态

java - 使用多个 onclicklistener 添加到 SharedPreference 值

android - 在 Android 的画中画模式下检测关闭和最大化点击事件

android - 流式网络广播

java - 从 FTPClient.getModificationTime() 解析日期字符串

java - 安卓, "Error in an XML file: aborting build."

android - 两个 native 移动应用程序共享相同的 Azure AD B2C(配置)