0

View を拡張するクラス PuzzleView があります。if ステートメントが true を返したときに、このビューから新しいアクティビティ おめでとうございます。

public class PuzzleView extends View { 
/*Code here blah blah blah then*/
 @Override
 public boolean onKeyDown(int keyCode, KeyEvent event) 
{
  if (game.isSolved()== true)
  {
    Context context = getContext();
    Intent i = new Intent(PuzzleView.this, Congratulations.class);
    getContext().startActivity(i);
  }

私が得ているエラーは、「コンストラクターのインテント(PuzzleView、クラス)は未定義です」です ここ

new Intent(PuzzleView.this, Congratulations.class);

@imrankhan への返信として、onKeyDown() 全体がここにあります。

@Override
   public boolean onKeyDown(int keyCode, KeyEvent event) 
   {

       if (game.isSolved()== true)
       {
           Context context = getContext();
           Intent i = new Intent(context, Congratulations.class);
           context.startActivity(i);
       }
       else
       {
      Log.d(TAG, "onKeyDown: keycode=" + keyCode + ", event="
            + event);
      switch (keyCode) {
      case KeyEvent.KEYCODE_DPAD_UP:
         select(selX, selY - 1);
         break;
      case KeyEvent.KEYCODE_DPAD_DOWN:
         select(selX, selY + 1);
         break;
      case KeyEvent.KEYCODE_DPAD_LEFT:
         select(selX - 1, selY);
         break;
      case KeyEvent.KEYCODE_DPAD_RIGHT:
         select(selX + 1, selY);
         break;
      case KeyEvent.KEYCODE_0:
      case KeyEvent.KEYCODE_SPACE: setSelectedTile(0); break;
      case KeyEvent.KEYCODE_1:     setSelectedTile(1); break;
      case KeyEvent.KEYCODE_2:     setSelectedTile(2); break;
      case KeyEvent.KEYCODE_3:     setSelectedTile(3); break;
      case KeyEvent.KEYCODE_4:     setSelectedTile(4); break;
      case KeyEvent.KEYCODE_5:     setSelectedTile(5); break;
      case KeyEvent.KEYCODE_6:     setSelectedTile(6); break;
      case KeyEvent.KEYCODE_7:     setSelectedTile(7); break;
      case KeyEvent.KEYCODE_8:     setSelectedTile(8); break;
      case KeyEvent.KEYCODE_9:     setSelectedTile(9); break;
      case KeyEvent.KEYCODE_ENTER:
      case KeyEvent.KEYCODE_DPAD_CENTER:
         game.showKeypadOrError(selX, selY);
         break;
      default:
         return super.onKeyDown(keyCode, event);
      }
      return true;
       }


   }
4

5 に答える 5

0

ビューのコンストラクターでアクティビティ参照を渡す必要があります。後でこの参照を使用できます。したがって、次のようなコンストラクターを定義します。

public class PuzzleView extends View
{
    Activity mActivity;
    public PuzzleView(Activity activity, Context context)
    {
         super(context);
         this.mActivity=activity;
    }
}

このアクティビティ参照を使用して、アクティビティを開始します。

Intent i = new Intent(mActivity, Congratulations.class);
    getContext().startActivity(i);
于 2012-08-29T04:55:13.650 に答える
0

ここで他の回答に同意します。しかし、許可されていない理由については情報が不足しているようです。簡単な言葉で言いましょう。

Intent を開始するとき、2 つの引数が必要です。1 つはコンテキストまたは Activity 参照で、もう 1 つは次の Activity クラスです。

しかし、あなたがやろうとしているのは、this参照を View を拡張するクラスに渡そうとしているため、このエラーが発生する理由です。

コンテキスト オブジェクトは、実際には、コントロールが転送された時点でスタック内の参照として機能します。そのため、コンテキスト オブジェクトまたは Activity オブジェクト自体を一緒に渡す必要があります。

最後になりましたが、Activity は実際には Context Class から拡張されています。したがって、それらのいずれかがあなたに代わってタスクを実行します。

于 2012-08-29T04:57:04.380 に答える
0

ビュークラスにアプリケーションコンテキストを保持する必要があるため、次のコードが答えます。

 public class PuzzleView extends View { 
    Context mContext;
        public PuzzleView (Context context, AttributeSet attrs) {
        super(context, attrs);  
        mContext=context;// keep the context

        } 
     @Override
     public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (game.isSolved()== true){
              Intent i = new Intent(mContext, Congratulations.class);
               mcontext.startActivity(i);
      }

編集

あなたの見解はこのようになるはずです。

<com.yourpackage.PuzzleView  
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/yourid"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" />
于 2012-08-29T05:00:08.157 に答える
0

これを試してみませんか -

Context context = getContext();
Intent i = new Intent(context, Congratulations.class);
context.startActivity(i);
于 2012-08-29T04:51:04.350 に答える
0

としてみてください

 @Override
 public boolean onKeyDown(int keyCode, KeyEvent event) 
{
  if (game.isSolved()== true)
  {
    Context context = getContext();
    Intent i = new Intent(context, Congratulations.class);
    context.startActivity(i);

  }
 return super.onKeyDown(keyCode, event);    
}
于 2012-08-29T04:50:37.267 に答える