1

Android用のターンベースのRPGゲームを作っています。ビューを拡張する別のクラスを起動する必要があるビューを拡張するクラスがあります。最初のクラスはプレイヤーがマップを歩き回る場所で、2 番目のクラスは戦闘画面になります。動作させようとしましたが、このエラーが発生します。

The constructor Intent(GameView, Class<BattleView>) is undefined

以前はまったく問題なくインテントを使用していましたが、ビューを拡張するクラスでインテントを使用しようとしたことはありません。これが私が問題を抱えている理由だと思います。ビューを拡張するクラスでインテントを使用することは可能ですか?

何か案は?

4

1 に答える 1

2

探しているIntentのコンストラクターは、コンテキストと、起動するクラス (アクティビティ) を受け取ります。

あなたのビュークラスから、これを行うことができるはずです:

Intent intentToLaunch = new Intent(getContext(), BattleView.class);

これによりインテントが正しく作成されますが、アクティビティをビューに渡さない限り、ビューからアクティビティを起動することはできません。これは非常に悪い考えです。ビューが他のアクティビティを起動してはならないため、実際にはこれは貧弱な設計です。代わりに、ビューは、そのビューの作成者が応答するインターフェースを呼び出す必要があります。

次のようになります。

public class GameView extends View {

  public interface GameViewInterface {
    void onEnterBattlefield();

  }
  private GameViewInterface mGameViewInterface;
  public GameView(Context context, GameViewInterface gameViewCallbacks) {
      super(context);
      mGameViewInterface = gameViewCallbacks;
  }

  //I have no idea where you are determining that they've entered the battlefield but lets pretend it's in the draw method
  @Override
  public void draw(Canvas canvas) {

     if (theyEnteredTheBattlefield) {
       mGameViewInterface.onEnterBattlefield();
     } 
  }

}

ほとんどの場合、Activity クラスからこのビューを作成しているので、そのクラスで GameViewInterface のインスタンスを作成するだけです。Activity で onEnterBattlefield() の呼び出しを受け取ったら、先ほど示した意図で startActivity を呼び出します。

于 2013-01-08T18:13:55.047 に答える