0

我有一个扩展视图的类 PuzzleView。当 if 语句返回 true 时,我希望能够从此视图中打开一个新活动 Congratulations。

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);
  }

我得到的错误是“构造函数 Intent(PuzzleView, Class) 未定义”这里

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

我同意这里的其他答案。但看起来他们缺乏关于为什么不允许这样做的信息。让我简单地说。

当您启动一个 Intent 时,它需要两个参数,一个是上下文或 Activity 引用,另一个是下一个 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

尝试作为

 @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 回答
0

你为什么不试试这个 -

Context context = getContext();
Intent i = new Intent(context, Congratulations.class);
context.startActivity(i);
于 2012-08-29T04:51:04.350 回答
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 回答