投射自定义TextView会导致我的应用崩溃

时间:2014-05-20 21:10:20

标签: android textview

我有一个自定义TextView类扩展TextView:

public class MessagingTextView extends TextView {
public MessagingTextView(Context context) {
    super(context);
}
public void make(String body, Boolean sent){
    this.setText(body);
    if (sent){
        this.setPadding(10, 10, 25, 10);
        this.setBackgroundResource(R.drawable.sent_bubble);

    }
    else{
        this.setPadding(25, 10, 10, 10);
        this.setBackgroundResource(R.drawable.sent_bubble);
    }
}

}

在我的活动中(在自定义适配器中)我通过以下代码实例化该类:

MessagingTextView body = (MessagingTextView)item.findViewById(R.id.s4_msg_body);
body.make(currentMsg.getBody(), currentMsg.getSent());

当我运行该代码时,我的应用程序崩溃,日志显示Cast Exception。 你能告诉我怎么解决这个问题? 提前谢谢!

这是Xml s4_item.xml

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

<TextView
    android:id="@+id/s4_msg_body"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_below="@+id/s4_msg_date"
    android:text="Message body"
    android:textSize="20dp" />

<TextView
    android:id="@+id/s4_msg_date"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:text="Message date"
    android:textAppearance="?android:attr/textAppearanceSmall" />
</RelativeLayout>

1 个答案:

答案 0 :(得分:1)

在XML中,您宣布TextView。你不能将它强制转换为任意子类,在本例中是MessagingTextView。如果您希望它成为子类,那么您必须将其声明为此类。

类似的东西:

<com.some.package.name.MessagingTextView
    android:id="@+id/s4_msg_date"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:text="Message date"
    android:textAppearance="?android:attr/textAppearanceSmall" />