我已经在一个名为DialButton2的类中扩展了ImageView类(不要担心类的名称,它无关紧要)。所有DialButton2类都显示位于drawable文件夹中的任意图像。
package com.com.com;
import android.content.Context;
import android.widget.ImageView;
import android.util.AttributeSet;
public class DialButton2 extends ImageView{
public DialButton2(Context context) {
super(context);
this.setImageResource(R.drawable.dialpad);
}
public DialButton2(Context context, AttributeSet attrs){
super(context, attrs);
this.setImageResource(R.drawable.dialpad);
}
}
在我的应用程序中主要活动的XML文件中,我指定应显示DialButton2对象。我给它id“button1”。
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:stretchColumns="1"
>
<TableRow
android:layout_weight="1">
<DialButton
android:id="@+id/button1"
android:src="@drawable/dialpad"
android:layout_weight="1"
/>
不要担心XML文件的其余部分,它无关紧要。
我的问题是,当我尝试在代码中实例化对按钮的引用时,eclipse告诉我必须将它转换为ImageView。这是为什么?
package com.com.com;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
public class Android3 extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.maintable);
/*
* The instantiating below gives an error saying I have to cast to ImageView.
*/
DialButton2 button1 = findViewById(R.id.button1);
}
}
答案 0 :(得分:2)
你必须转发到DialButton2
DialButton2 button1 = (DialButton2) findViewById(R.id.button1);
findViewById()返回一个View,您必须先将其强制转换为DialButton2。
答案 1 :(得分:1)
您必须强制转换它,因为getViewById(..)
会返回View
个对象。当您从父类(View
)转到子类(ImageView
/ DialButton2
)时,需要进行强制转换。您可以查看方法详情here。
答案 2 :(得分:1)
天气与否DialButton2
是否无关紧要因为无论您尝试使用findViewById(int)“查找”哪个视图,都必须将其强制转换为正在初始化的同一个类