Android setViewValue无法强制转换为ImageView

时间:2013-12-27 11:26:15

标签: android casting

设置ViewBinder以在listView中交替显示图像:

            SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
                    R.layout.contacts_row, c, new String[] {
                            c.getColumnName(1), c.getColumnName(2) },
                    new int[] { R.id.c_title, R.id.c_description });

            adapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() {
                public boolean setViewValue(View view, Cursor c, int columnIndex) {

                    // Variant 1: displayImage = (ImageView) view;
                    // Variant 2: displayImage = (ImageView)findViewById(R.id.img);

                    displayImage.setImageResource(R.drawable.good);

                    // }

                    return true;

                }
            });

            setListAdapter(adapter);

调用堆栈:

  • java.lang.ClassCastException:无法转换android.widget.TextView 到android.widget.ImageView
  • E / AndroidRuntime(8693):在 xxxx.android.Contacts $ 2.setViewValue(Contacts.java:133)

请帮助澄清为什么视图在变体1和2中都存在错误

1 个答案:

答案 0 :(得分:0)

我认为设置视图值将调用所有视图。但您只想在图像视图上设置图像。我想你可以尝试一下。

try {
    displayImage = (ImageView) view;
    displayImage = (ImageView)findViewById(R.id.img);
    displayImage.setImageResource(R.drawable.good);
} catch (ClassCastException e) {
}

或者你也可以试试这个。

if (view instanceof ImageView) {
     // DO YOUR IMAGEVIEW RELATED STUFF HERE.
    displayImage = (ImageView) view;
    displayImage = (ImageView)findViewById(R.id.img);
    displayImage.setImageResource(R.drawable.good);
}

实际问题是setViewValue将针对不同类型的视图调用,您无法在ImageView中键入所有视图。在你的情况下,你的行布局包含TextView和ImageView两者都将为ImageView调用setViewValue然后没有问题你可以进行类型转换和使用但是当它将被调用任何其他类型的视图然后它将触发异常,因为你不能进行类型转换它。希望它可以帮到你。 :)