如果更改了元素的顺序,Android自定义适配器会崩溃

时间:2014-02-19 10:38:04

标签: android layout textview imageview adapter

我想为listview使用自定义适配器。

每行都使用以下代码定义:

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal" >


        <ImageView
                android:layout_width="50dp"
                android:layout_height="50dp" 
                android:id="@+id/row_image" />

            <LinearLayout 
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="vertical">

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content" 
                    android:id="@+id/row_title"
                    android:layout_marginLeft="3dp"
                    android:layout_marginRight="3dp"
                    android:textStyle="bold"/>

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content" 
                    android:id="@+id/row_description"
                    android:layout_marginLeft="3dp"
                    android:layout_marginRight="3dp"/>

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content" 
                    android:id="@+id/row_period"
                    android:layout_marginLeft="3dp"
                    android:layout_marginRight="3dp"/>

            </LinearLayout>


            <LinearLayout 
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                android:gravity="center">

                <ImageView
                android:layout_width="20dp"
                android:layout_height="20dp" 
                android:id="@+id/row_edit" 
                android:layout_marginBottom="5dp"/>

                <ImageView
                android:layout_width="20dp"
                android:layout_height="20dp" 
                android:id="@+id/row_trash" 
                android:layout_marginTop="5dp"/>

            </LinearLayout>
    </LinearLayout>

适配器类代码:

public View getView(int position, View convertView, ViewGroup parent){

        View v = convertView;

        if (v == null) {
            LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = inflater.inflate(R.layout.spec_row, null);
        }
        Spec i = specs[position];

        if (i != null) {

            ImageView image = (ImageView) v.findViewById(R.id.row_image);

            if (image != null){
                String urldisplay = "MY_URL"+i.image;

                DownloadImage di=new DownloadImage(urldisplay, image, "baja");
                di.execute();
            }

            TextView title = (TextView) v.findViewById(R.id.row_title);

            if (title != null){
                title.setText(i.title);
            }

            TextView description = (TextView) v.findViewById(R.id.row_description);

            if (description != null){
                description.setText(i.description);
            }

            TextView period = (TextView) v.findViewById(R.id.row_period);

            if (period != null){
                period.setText("da "+i.start+" a "+i.finish);
            }

            ImageView edit = (ImageView) v.findViewById(R.id.row_edit);
            edit.setImageResource(R.drawable.edit);

            ImageView trash = (ImageView) v.findViewById(R.id.row_trash);
            trash.setImageResource(R.drawable.trash);   
        }
        return v;
    }

如上所示的代码可以工作,但我无法看到最后两个图像(可能是因为textviews使用了所有空间)如果我将图像放在行的开头(在第一个图像之前)应用程序崩溃并且logcat说:Imageview无法转换为Textview 在适配器java代码中。

为什么让这次改变导致崩溃?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

转到Project-&gt; Clean-&gt; ok 有时它只是Eclipse