我正在尝试将ID应用于ImageButton,但它在构造函数的最后一行崩溃。
它在循环的第一次迭代时崩溃
这是我的xml:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:id="@+id/imageView0"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:adjustViewBounds="true"
android:onClick="makeMove"
android:tag="0"
android:scaleType="centerInside"
app:srcCompat="@drawable/white" />
//imageView1 ... imageView41
<ImageView
android:id="@+id/imageView41"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:adjustViewBounds="true"
android:scaleType="centerInside"
app:srcCompat="@drawable/white" />
</LinearLayout>
ImageButtonClass:
我不得不在构造函数内部使用MainActity,因为我无法访问findViewById方法。
public class ImageButtonClass
{
int id;
int arrId;
String color;
ImageButton imageButton;
ImageButtonClass(MainActivity mainActivity, int id, int arrId)
{
this.arrId = arrId;
this.id = id;
this.color = "White";
//crashes on next line.
imageButton = (ImageButton) mainActivity.findViewById(arrId);
}
}
和MainActivity:
我之所以使用getResources,是因为XML中的所有ID都具有相同的名称,但结尾不同。
ArrayList<ImageButtonClass> mBoard;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mBoard = new ArrayList<>();
for(int i = 0; i < 42; i++)
{
int itemId = getResources().getIdentifier("imageView" + i, "id",
getPackageName());
mBoard.add(new ImageButtonClass(this,i,itemId));
}
}
答案 0 :(得分:0)
java.lang.ClassCastException:android.support.v7.widget.AppCompatImageView无法转换为android.widget.ImageButton
也许您会看到此异常。
ImageView无法转换为ImageButton。
将视图类型imageview更改为imagebutton或将ImageButtonClass-imageButton的类型更改。