找不到扩展视图的类?

时间:2013-08-27 12:48:45

标签: android class android-layout android-manifest

我将Button视图扩展到MyButton以添加一些定制方法,即

public class MyButton extends Button {

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

    // Bespoke methods etc.

}

然后在布局xml

<com.package.mine.MyButton
        android:id = "@+id/button"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        />    

这很有效 - 太棒了!但是,当我尝试将MyButton类作为static内部类放在我的活动中时,应用程序会一直崩溃,即在我定义MyButton的活动中

public static class MyButton extends Button {

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

    // Bespoke methods etc.

}

我在xml布局中将其称为

<com.package.mine.MyActivity.MyButton
        android:id = "@+id/button"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        />

清单文件中的包定义为package="com.package.mine",logcat错误为:

java.lang.ClassNotFoundException: Didn't find class "com.package.mine.MyActivity.MyButton" on path: DexPathList[[zip file "/data/app/com.package.mine-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.package.mine-1, /vendor/lib, /system/lib]]

无法弄清楚我哪里出错了。有任何想法吗?感谢。

1 个答案:

答案 0 :(得分:2)

com.package.mine是您的包名称,MyButton是您的自定义按钮类名。

所以你应该在包名下面有这个类。你在做什么是错的。

将自定义按钮类放在单独的文件中。您的包名称不是com.package.mine.MyActivity。它是com.package.mine

如果你想要一个内部类

,你可以这样做
    public class MainActivity extends Activity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        MyButton mb = new MyButton(this);
        setContentView(mb);
        mb.setText("hello");
    }
    public  class MyButton extends Button {

        public MyButton(Context context) {
            super(context);
            // TODO Auto-generated constructor stub
        }

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

        @Override
        public void setText(CharSequence text, BufferType type) {
            // TODO Auto-generated method stub
            super.setText(text, type);
        }
    }
}