我在使用自定义Button类时遇到问题。

我尝试将xml布局从<Button/>更改为<gButton/>,但这没有用。

我也尝试在第15行中强制转换Button page1 = (gButton) findView....,但由于某些原因而无法正常工作(您可以强制转换子类,对吗?

我不断从LogCat收到的错误是:

Caused by: java.lang.ClassCastException: android.widget.Button
     at flash.tut.ButtonPage.onCreate(ButtonPage.java:15)


任何帮助深表感谢。

这是我的按钮视图:

public class ButtonPage extends Activity{
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.button);

         gButton page1 = (gButton) findViewById(R.id.Button01); //<---LogCat: ClassCastException
         page1.setOnClickListener(new View.OnClickListener() {
              public void onClick(View view) {
                   Intent mI = new Intent(view.getContext(), Page1.class);
                   startActivityForResult(mI, 0);
              }
         });
     }
}


我的gButton扩展了按钮类:

public class gButton extends Button{
    private static Context con;

    public gButton(){this("Blank");}

    public gButton(String name){
        this(name, R.color.text_color);
    }

    public gButton(String name, int col) {
        this(name, col, con);
    }

    public gButton(String name, int col, Context context) {
        super(context);   //necessary context...dont know why.
        setBackgroundResource(R.drawable.icon);
        setTextColor(col);
        setText(name);
        setTextSize(14);
    }
}


最后是我的xml布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

 <Button android:text="Page 1"
        android:id="@+id/Button01"
        android:layout_width="250px"
        android:textSize="18px"
        android:layout_height="55px">
    </Button>

 <Button android:text="Page 2"
        android:id="@+id/Button02"
        android:layout_width="250px"
      android:textSize="18px"
        android:layout_height="55px">
    </Button>

 <Button android:text="Page 3"
        android:id="@+id/Button03"
        android:layout_width="250px"
      android:textSize="18px"
        android:layout_height="55px">
    </Button>

<Button android:text="ListView Page"
        android:id="@+id/ButtonList"
        android:layout_width="250px"
      android:textSize="18px"
        android:layout_height="55px">
    </Button>

</LinearLayout>

最佳答案

要将按钮转换为gButton,应声明如下按钮:

<com.example.gButton
    android:text="Page 3"
    android:id="@+id/Button03"
    android:layout_width="250px"
    android:textSize="18px"
    android:layout_height="55px">
</com.example.gButton>


但您应该放下包装而不是“ com.example”。

而且您的gButton类必须具有下一个构造函数:

package com.example;

public class gButton extends Button{
    ...

    public gButton(Context context, AttributeSet attrs) { // this constructor will be called by inflater for creating object instance
        super(context, attrs);
    }

    ...


}

然后,您可以按在问题中所写的内容按下按钮。但是请注意,不会调用您的构造函数。

08-03 13:51