如何使用我的自定义TextView来构建TextView?

时间:2012-05-21 07:43:19

标签: java android

我从这里获取文本视图实例:

    TextView date = null;

        try {
            date = (TextView) getLayoutInflater().inflate(
                    R.layout.some_textview, null);
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();

        } 

我创建了自定义textview:

public class MyTextView extends TextView{

    public MyTextView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    public MyTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public MyTextView(Context context) {
        super(context);
    }


}

现在我要投射那些:

MyTextView my = (MyTextView)date;

我得到了这个的例外:

 java.lang.ClassCastException: android.widget.TextView cannot be cast to com.myapp.name.MyTextView

那应该怎么做?

感谢。

修改

如果我将date声明为MyTextView,仍然会得到相同的异常,那么我的xml是some_textview:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="This is a template for date text view"  
        />

4 个答案:

答案 0 :(得分:4)

您的XML布局R.layout.some_textview资源是否正确?

不要使用

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    ...
    />

您必须在XML中使用自定义类:

<com.your.package.MyTextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    ...
    />

课程路径是正确的非常重要!

答案 1 :(得分:2)

您可以直接在XML中使用MyTextView,而不是<TextView />使用<com.myapp.name.MyTextView />

然后在您的代码中使用com.myapp.name.MyTextView而不是TextView。

答案 2 :(得分:0)

您应将date声明为MyTextView。您试图将TextView对象强制转换为TextView的子类,但该对象不是子类类型的实例(see example)。

答案 3 :(得分:0)

尝试使用如下:

    MyTextView date = null;

    try {
        date = (MyTextView) getLayoutInflater().inflate(
                R.layout.some_textview, null);
    } catch (Exception e) {
        // TODO: handle exception
        e.printStackTrace();

    }