3

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

    TextView date = null;

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

        } 

我创建了我的自定义文本视图:

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

那么应该怎么做呢?

谢谢。

编辑:

如果我声明dateMyTextView,仍然得到相同的异常,那是我的 some_textview 的 xml:

<?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

4 回答 4

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"
    ...
    />

类路径正确非常重要!

于 2012-05-21T07:50:53.323 回答
2

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

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

于 2012-05-21T07:50:08.637 回答
0

你应该声明dateMyTextView. 您尝试将 TextView 对象强制转换为 TextView 的子类,但该对象不是子类类型的实例(参见示例)。

于 2012-05-21T07:46:25.760 回答
0

尝试在这里使用:

    MyTextView date = null;

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

    } 
于 2012-05-21T07:47:06.180 回答