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

では、どのようにすればよいのでしょうか?

ありがとう。

編集:

として宣言dateした場合MyTextViewでも、同じ例外が発生します。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

<TextView />使用する代わりに、XML で MyTextView を直接使用できます。<com.myapp.name.MyTextView />

次に、コードで TextView の代わりに com.myapp.name.MyTextView を使用します。

于 2012-05-21T07:50:08.637 に答える
0

dateとして宣言する必要がありMyTextViewます。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 に答える