我有一个扩展View的类PuzzleView。我希望能够打开一个新的活动。当if语句返回true时,从这个View中恭喜。
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;
}
}
答案 0 :(得分: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);
}
答案 1 :(得分:0)
你为什么不试试这个 -
Context context = getContext();
Intent i = new Intent(context, Congratulations.class);
context.startActivity(i);
答案 2 :(得分: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);
答案 3 :(得分:0)
我同意这里的其他答案。但看起来他们缺乏信息,因为它不被允许。让我简单地说一下。
当你启动一个Intent时,它需要两个参数,一个是上下文或一个Activity引用,另一个是下一个Activity类。
但是你要做的是,你试图将 this 引用传递给扩展View的类,这就是你得到这个错误的原因。
上下文对象实际上充当堆栈中从传输控件的位置开始的引用。因此,您需要传递上下文对象或Activity对象本身。
最后但并非最不重要的是,Activity实际上是从Context Class扩展而来的。所以他们中的任何一个都会为你完成任务。
答案 4 :(得分: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" />