android - Android 中的自定义 ListAdapter 问题?获取 ClassCastException?如何?

标签 android listview adapter

我想提高 ListView 的性能。

这是我适配器中 getView 方法的代码?

public View getView(int arg0, View text_view_name, ViewGroup parent) {
    try {

        if (text_view_name == null) {
            text_view_name = mInflater.inflate(
                    R.layout.bs_content_list_item1, null);
            text_view_name.setTag(R.id.text1_detail1, text_view_name
                    .findViewById(R.id.text1_detail1));
            text_view_name.setTag(R.id.text3_detail1, text_view_name
                    .findViewById(R.id.text3_detail1));
            text_view_name.setTag(R.id.eve_img_detail1, text_view_name
                    .findViewById(R.id.eve_img_detail1));
        }

        text1 = (TextView) text_view_name.getTag(R.id.text1_detail1);
        // text2 = (TextView) text_view_name.getTag(R.id.text2);
        text3 = (TextView) text_view_name.getTag(R.id.text3_detail1);
        img = (ImageView) text_view_name.getTag(R.id.eve_img_detail1);
        text1.setText(VAL1[arg0]);
        text3.setText(VAL3[arg0]);

        if (!mBusy) {
            img_value = new URL(VAL4[arg0]);
            mIcon11 =   BitmapFactory.decodeStream(img_value.openConnection()
                    .getInputStream());
            img.setImageBitmap(mIcon11);

            text_view_name.setTag(R.id.eve_img_detail1, null);
        } else {
            img.setImageResource(R.drawable.icon);
            text_view_name.setTag(R.id.eve_img_detail1, text_view_name
                    .findViewById(R.id.eve_img_detail1));
        }

    } catch (Exception e) {
        name = "Exception in MultiLine_bar_details1 getView";
        Log.v(TAG, name + e);
    }
    return text_view_name;
}

这是 scrollstatechanged 方法的代码:

public void onScrollStateChanged(AbsListView view, int scrollState) {
    switch (scrollState) {
    case OnScrollListener.SCROLL_STATE_IDLE:
        try {
            MultiLine_bar_details1.mBusy = false;

            int first = view.getFirstVisiblePosition();
            int count = view.getCount();

            for (int i = 0; i < count; i++) {
                ImageView t = (ImageView) view.getChildAt(i);// here getting the ClassCastException
                if (t.getTag(R.id.eve_img_detail1) != null) {

                    MultiLine_bar_details1.img_value = new URL(
                            MultiLine_bar_details1.VAL4[first + i]);

                    MultiLine_bar_details1.mIcon11 = BitmapFactory
                            .decodeStream(MultiLine_bar_details1.img_value
                                    .openConnection().getInputStream());
                    MultiLine_bar_details1.img.setImageBitmap(MultiLine_bar_details1.mIcon11);
                    t.setTag(R.id.eve_img_detail1, null);
                }
            }
        } catch (Exception e) {
            Log.v(TAG, "Idle" + e);
        }

        // mStatus.setText("Idle");
        break;
    case OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:
        MultiLine_bar_details1.mBusy = true;

        break;
    case OnScrollListener.SCROLL_STATE_FLING:
        MultiLine_bar_details1.mBusy = true;
        break;
    }
}

在空闲状态下获取异常:

05-03 16:47:15.201: VERBOSE/BS_Bars(258): Idlejava.lang.ClassCastException: android.widget.LinearLayout

这对我来说要正确获得输出非常复杂。实际上我有带有自定义适配器的 ListView 。该图标使 ListView 滚动非常慢。我正在从图像 url 获取图标的图像。到目前为止(上面的代码)我可以提高我的 ListView 的滚动性能。但是图像图标的顺序不正确。当我滚动 ListView 时它会动态变化..

我提到了 commonsware busy coder guidethis blog .

编辑: 我非常大的问题是“我们如何使用参数 AbsListView 访问 scrollstatechanged 中的 ImageView ?”

这里面有什么问题?如何做得更好?任何想法?

最佳答案

bs_content_list_item1.xml 中的顶级 View 是什么?您正在将 ListView.getChildAt(i) 的结果转换到 ImageView,但看起来它不是 ImageView。

关于android - Android 中的自定义 ListAdapter 问题?获取 ClassCastException?如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2757583/

相关文章:

java - 如何从 Android 光标获取电话号码?

java - Jersey 休息框架 - 授权 - 一些疑问

android - 警报对话框生成器确认按钮

java - 在包含下划线的 Android 包名称中调用 JNI 函数

java - ListView ItemClickListener 双击时有效,单击时不响应

android - 具有不同 Items 和 ViewHolder 的 ListView 导致 ClassCastException

java - 错误 : java. lang.IndexOutOfBoundsException : Invalid index 2, 大小为 2

java - 如何通过自定义适配器将项目的 ArrayList 填充到 ListView?

android - 如何使用 baseadapter 将获取的 json 数据显示到 ListView 中

java - 将适配器保留为 Activity 的内部类或外部类,更好的方法是什么?