ClassCastException возникает при попытке выполнить, казалось бы, действительное явное приведение - PullRequest
1 голос
/ 09 августа 2011

Я пытаюсь построить эту простую игру, и я продолжаю сталкиваться с ClassCastException при попытке преобразовать мой SurfaceView в PuzzleSurfaceView (который расширяет SurfaceView).

package com.scf.android.CAPuzzle;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;

public class CAPuzzleActivity extends Activity {
PuzzleSurfaceView puzzleSurfaceView;
View.OnClickListener puzzleClickListener;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);        
    setContentView(R.layout.main);

    puzzleSurfaceView = (PuzzleSurfaceView)findViewById(R.id.puzzleSurfaceView);
    puzzleClickListener = new View.OnClickListener() {
        public void onClick(View v) {

            }
        };

}
}

И класс PuzzleSurfaceView:

package com.scf.android.CAPuzzle;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
class PuzzleSurfaceView extends SurfaceView implements SurfaceHolder.Callback {
Bitmap live;
Bitmap dead;

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

@Override
public void onDraw(Canvas c) {
    c.drawBitmap(live, 0, 0, null);
}

@Override
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2,
        int arg3) {
    // TODO Auto-generated method stub

}

@Override
public void surfaceCreated(SurfaceHolder arg0) {
    // TODO Auto-generated method stub
    live =  BitmapFactory.decodeResource(getResources(), R.drawable.icon);
}

@Override
public void surfaceDestroyed(SurfaceHolder arg0) {
    // TODO Auto-generated method stub

}   
}

Пожалуйста, сообщите ... Я часами бьюсь головой об стену ...

Мой main.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"
    >
    <SurfaceView android:layout_width="fill_parent"     android:layout_height="wrap_content" android:id="@+id/puzzleSurfaceView"></SurfaceView>
    <SurfaceView android:layout_height="wrap_content"     android:layout_width="fill_parent" android:id="@+id/solutionSurfaceView"></SurfaceView>
</LinearLayout>

Ответы [ 2 ]

1 голос
/ 09 августа 2011

Вам нужно будет создать экземпляр вашего класса и добавить его в макет.Вы не можете просто разыграть.Приведение работает только при приведении к тем же или родительским классам или интерфейсам.Вы также можете сделать этот пользовательский компонент детализированным здесь и использовать свой PuzzleSurfaceView в вашем main.xml

0 голосов
/ 09 августа 2011

Вы должны заменить одну строку в main.xml следующим:

 <com.scf.android.CAPuzzle.PuzzleSurfaceView android:layout_width="fill_parent"     android:layout_height="wrap_content" android:id="@+id/puzzleSurfaceView"></com.scf.android.CAPuzzle.PuzzleSurfaceView>

и добавьте конструктор

PuzzleSurfaceView(Context context, AttributeSet attrs)

в вашем классе PuzzleSurfaceView.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...