Java 如何将包装类附加到“非”视图;“视图”;类型

Java 如何将包装类附加到“非”视图;“视图”;类型,java,android,Java,Android,我想在XML中定义的ImageView中附加一个新类。以下代码仅适用于视图类型。当我将类型更改为ImageView时,我得到了ClassCastException 这是我的文章_view.xml文件: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_w

我想在XML中定义的ImageView中附加一个新类。以下代码仅适用于视图类型。当我将类型更改为ImageView时,我得到了ClassCastException

这是我的文章_view.xml文件:

<RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/bg_color"
        >
<LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:weightSum="600">


    <ImageView
        android:id="@+id/mybutton1"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="75"
        class="com.example.customui2.MainActivity$ArticleFragment$MyButton"
        android:contentDescription="@string/logo_desc"
        android:src="@drawable/menu_button"
        android:text="@string/button1"
        android:textColor="@color/button1_color"
        android:textSize="45sp" />

</LinearLayout>

</RelativeLayout>
现在我在这行中得到错误ClassCastException:

MyButton button1 = (MyButton) rootView.findViewById(R.id.mybutton1);
下面是日志:

07-16 17:35:36.855: E/AndroidRuntime(7039): FATAL EXCEPTION: main
07-16 17:35:36.855: E/AndroidRuntime(7039): Process: com.example.customui2, PID: 7039
07-16 17:35:36.855: E/AndroidRuntime(7039): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.customui2/com.example.customui2.MainActivity}: java.lang.ClassCastException: android.widget.ImageView cannot be cast to com.example.customui2.MainActivity$ArticleFragment$MyButton
07-16 17:35:36.855: E/AndroidRuntime(7039):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
07-16 17:35:36.855: E/AndroidRuntime(7039):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
07-16 17:35:36.855: E/AndroidRuntime(7039):     at android.app.ActivityThread.access$800(ActivityThread.java:135)
07-16 17:35:36.855: E/AndroidRuntime(7039):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
07-16 17:35:36.855: E/AndroidRuntime(7039):     at android.os.Handler.dispatchMessage(Handler.java:102)
07-16 17:35:36.855: E/AndroidRuntime(7039):     at android.os.Looper.loop(Looper.java:136)
07-16 17:35:36.855: E/AndroidRuntime(7039):     at android.app.ActivityThread.main(ActivityThread.java:5017)
07-16 17:35:36.855: E/AndroidRuntime(7039):     at java.lang.reflect.Method.invokeNative(Native Method)
07-16 17:35:36.855: E/AndroidRuntime(7039):     at java.lang.reflect.Method.invoke(Method.java:515)
07-16 17:35:36.855: E/AndroidRuntime(7039):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
07-16 17:35:36.855: E/AndroidRuntime(7039):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
07-16 17:35:36.855: E/AndroidRuntime(7039):     at dalvik.system.NativeStart.main(Native Method)
07-16 17:35:36.855: E/AndroidRuntime(7039): Caused by: java.lang.ClassCastException: android.widget.ImageView cannot be cast to com.example.customui2.MainActivity$ArticleFragment$MyButton
07-16 17:35:36.855: E/AndroidRuntime(7039):     at com.example.customui2.MainActivity$ArticleFragment.onCreateView(MainActivity.java:110)
07-16 17:35:36.855: E/AndroidRuntime(7039):     at android.support.v4.app.Fragment.performCreateView(Fragment.java:1504)
07-16 17:35:36.855: E/AndroidRuntime(7039):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:942)
07-16 17:35:36.855: E/AndroidRuntime(7039):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1121)
07-16 17:35:36.855: E/AndroidRuntime(7039):     at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
07-16 17:35:36.855: E/AndroidRuntime(7039):     at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1484)
07-16 17:35:36.855: E/AndroidRuntime(7039):     at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:571)
07-16 17:35:36.855: E/AndroidRuntime(7039):     at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1171)
07-16 17:35:36.855: E/AndroidRuntime(7039):     at android.app.Activity.performStart(Activity.java:5241)
07-16 17:35:36.855: E/AndroidRuntime(7039):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2168)
07-16 17:35:36.855: E/AndroidRuntime(7039):     ... 11 more
07-16 17:35:39.895: I/Process(7039): Sending signal. PID: 7039 SIG: 9

我应该更改什么才能将类附加到视图以外的类型,如ImageView?

MyButton必须扩展ImageView才能将其强制转换为ImageView

如果MyButton类只是一个视图,那么它缺少您尝试使用的所有ImageView组件。也许你可以用普通的图像视图来代替

编辑:

您可以使用小写视图标记+class属性在XML中引用MyButton类:

<view
    android:id="@+id/mybutton1"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="75"
    class="com.example.customui2.MainActivity$ArticleFragment$MyButton"
    android:contentDescription="@string/logo_desc"
    android:src="@drawable/menu_button"
    android:text="@string/button1"
    android:textColor="@color/button1_color"
    android:textSize="45sp" />

我对它进行了测试,它没有崩溃

我已经尝试过扩展ImageView而不是View,但是错误仍然存在。我在回答中添加了一些示例代码,以供澄清。非常感谢。整个GUI制作已经让我发疯了。。。早些时候,我浪费了1个多小时,因为这个小写视图和大写。。。现在我似乎无法在我的类扩展类型和xml:P中的类型之间找到一个很好的匹配
<view
    android:id="@+id/mybutton1"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="75"
    class="com.example.customui2.MainActivity$ArticleFragment$MyButton"
    android:contentDescription="@string/logo_desc"
    android:src="@drawable/menu_button"
    android:text="@string/button1"
    android:textColor="@color/button1_color"
    android:textSize="45sp" />
public static class MyButton extends ImageView