关于alertDialog监听问题,android新手,求助各位大神

时间:2022-11-01 14:07:57
最近刚开始学习android,试着跟着网上的视频学习。自己试着写一点简单的小游戏
可是有些问题不知道怎么解决。
问题如下:
我试着用AlterDialog 时设置一个监听按钮,当点击监听按钮的时候直接跳转到另一个类去
用Intent时,总是报错。在此求助论坛内的大神

if(complete){
new AlertDialog.Builder(getContext())
.setTitle("你好")
.setMessage("游戏结束")
.setPositiveButton("确定", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
Intent intent=new Intent(GameView.this,FinishGame.class);
我使用Intent传递,可是报错提示 GameView,和FinishGame未定义
startActivity(intent);

}
}).show();
}

19 个解决方案

#1


贴下FinishGame和GameView是怎么定义的?
activit没注册?

#2


引用 1 楼 inquisitive_plus 的回复:
贴下FinishGame和GameView是怎么定义的?
activit没注册?

注册了。 finishGame
public class FinishGame extends Activity {
private Button reStart,list;
private TextView finishScore;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.finish_activity);

reStart=(Button) findViewById(R.id.return_start);
list=(Button)findViewById(R.id.go_list);
finishScore=(TextView)findViewById(R.id.TvScore);
reStart.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Intent intent=new Intent(FinishGame.this,StartGame.class);
startActivity(intent);

}
});
}

}

#3


是编译错误么?clean一下

#4


楼主好牛啊!你是怎么装上Android sdk包的?我为什么总是出fetching http......的问题?就是怎么连上谷歌的服务器?非要*不可吗?还要装Android Studio吗?我买了一本Android编程的书,Android Studio只字未提。楼主都能自学成才了,羡慕加敬佩啊,教教我吧,鹅滴哥。

#5


你的gameview不会就是个view   不是activity吧?还有注册是要在manifefest里哦

#6


引用 5 楼 u010668114 的回复:
你的gameview不会就是个view   不是activity吧?还有注册是要在manifefest里哦

。。不是View  ,是activity。注册过了,就是那个地方调用alertDialog时,设置Button,无法使用Intent的方法,报错是undifined。不懂哪出问题了

#7


引用 3 楼 inquisitive_plus 的回复:
是编译错误么?clean一下

不是呀,其他地方都没什么问题,我不太理解AlertDialog,监听的使用,特来求助

#8


引用 4 楼 u012551935 的回复:
楼主好牛啊!你是怎么装上Android sdk包的?我为什么总是出fetching http......的问题?就是怎么连上谷歌的服务器?非要*不可吗?还要装Android Studio吗?我买了一本Android编程的书,Android Studio只字未提。楼主都能自学成才了,羡慕加敬佩啊,教教我吧,鹅滴哥。

我是直接下载一个Adt bundle 的直接用就行啦。

#9


引用 7 楼 bingolalalalala 的回复:
不是呀,其他地方都没什么问题,我不太理解AlertDialog,监听的使用,特来求助

代码没什么问题
我猜测,你是想在其他地方使用这段代码

if(complete){
new AlertDialog.Builder(getContext())
.setTitle("你好")
.setMessage("游戏结束")
.setPositiveButton("确定", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
Intent intent=new Intent(GameView.this,FinishGame.class);
我使用Intent传递,可是报错提示 GameView,和FinishGame未定义
startActivity(intent);

}
}).show();


GameView,和FinishGame未定义这个是编译错误?
GameView.this无法离开GameView所处的类,
随意使用GameView.this可能会报
No enclosing instance of the type GameView is accessible in scope

工具类调用是,方法一般都提供一个context参数,这样AlertDialog就知道是哪里提供的了
FinishGame.class应该不会报错,只要你有这个类。

#10


贴一下错误信息?

#11


引用 9 楼 inquisitive_plus 的回复:
Quote: 引用 7 楼 bingolalalalala 的回复:

不是呀,其他地方都没什么问题,我不太理解AlertDialog,监听的使用,特来求助

代码没什么问题
我猜测,你是想在其他地方使用这段代码

if(complete){
new AlertDialog.Builder(getContext())
.setTitle("你好")
.setMessage("游戏结束")
.setPositiveButton("确定", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
Intent intent=new Intent(GameView.this,FinishGame.class);
我使用Intent传递,可是报错提示 GameView,和FinishGame未定义
startActivity(intent);

}
}).show();


GameView,和FinishGame未定义这个是编译错误?
GameView.this无法离开GameView所处的类,
随意使用GameView.this可能会报
No enclosing instance of the type GameView is accessible in scope

工具类调用是,方法一般都提供一个context参数,这样AlertDialog就知道是哪里提供的了
FinishGame.class应该不会报错,只要你有这个类。


谢谢帮忙,可是还是有点不懂,我把GameView的代码贴一下,求大神解答
package hlju.daniel.game2048edition;

import java.util.ArrayList;
import java.util.List;

import hlju.daniel.game2048edition.MainActivity;

import android.app.AlertDialog;
import android.app.Notification.Action;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Point;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.GridLayout;


public class GameView extends GridLayout {

// 添加GameView的3个构造方法
public GameView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
initGameView();
}

public GameView(Context context, AttributeSet attrs) {
super(context, attrs);
initGameView();
}

public GameView(Context context) {
super(context);
initGameView();
}

// 添加一个初始化的构造方法
private void initGameView() {
setColumnCount(4);
setBackgroundColor(0xffbbada0);

setOnTouchListener(new View.OnTouchListener() {
private float start_X, start_Y, offset_X, offset_Y;

@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
start_X = event.getX();
start_Y = event.getY();
break;
case MotionEvent.ACTION_UP:
offset_X = event.getX() - start_X;
offset_Y = event.getY() - start_Y;



if (Math.abs(offset_X) > Math.abs(offset_Y)) {
if (offset_X < -20) {
slip_left();
System.out.println("right");

} else if (offset_X > 20) {
slip_right();
System.out.println("left");
}
}else{
if(offset_Y<-20){
slip_up();
System.out.println("up");

}else if(offset_Y>20){
slip_down();
System.out.println("down");

}
}
break;
}
return true;
}
});
}
@Override
//设置卡片的宽高
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
int cardWidth=(int)(Math.min(w, h)-10)/4;
addCards(cardWidth, cardWidth);
startGame();

}
private void addCards(int cardWidth,int cardHeigh){
//添加卡片的方法
Card c;
for (int y = 0; y < 4; y++) {
for (int x = 0; x < 4; x++) {
c=new Card(getContext());
c.setNumber(0);
addView(c, cardWidth, cardHeigh);
cardsMap[x][y]=c;
}

}
}
private void startGame(){
MainActivity.getMainActivity().chearScore();
for (int y = 0; y < 4; y++) {
for (int x = 0; x < 4; x++) {
cardsMap[x][y].setNumber(0);
}
}
addRandomNumber();
addRandomNumber();
}
private void addRandomNumber(){

emptyPoints.clear();
for (int y = 0; y < 4; y++) {
for (int x = 0; x < 4; x++) {
if(cardsMap[x][y].getNumber()<=0){
emptyPoints.add(new Point(x,y));

}
}
}
Point p=emptyPoints.remove((int)(Math.random()*emptyPoints.size()));
cardsMap[p.x][p.y].setNumber(Math.random()>0.1?2:4);
}



private void slip_left(){
//设定一个addOne判断是否需要添加Cards
boolean addOne =false;
//向左滑的构造方法
for (int y = 0; y < 4; y++) {
for (int x = 0; x < 4; x++) {

for (int x1 = x+1; x1 < 4; x1++) {
if(cardsMap[x1][y].getNumber()>0){


if(cardsMap[x][y].getNumber()<=0){
cardsMap[x][y].setNumber(cardsMap[x1][y].getNumber());
cardsMap[x1][y].setNumber(0);
x--;
addOne=true;
}else if(cardsMap[x][y].equals(cardsMap[x1][y])){
cardsMap[x][y].setNumber(cardsMap[x][y].getNumber()*2);
cardsMap[x1][y].setNumber(0);
MainActivity.getMainActivity().AddScore(cardsMap[x][y].getNumber());
addOne=true;
}
break;
}
}
}
}
if(addOne){
addRandomNumber();
finish();
}
}
private void slip_right(){
boolean addOne =false;
//向右滑动构造方法
for (int y = 0; y < 4; y++) {
for (int x=3; x >=0; x--) {

for (int x1 = x-1; x1 >=0; x1--) {
if(cardsMap[x1][y].getNumber()>0){


if(cardsMap[x][y].getNumber()<=0){
cardsMap[x][y].setNumber(cardsMap[x1][y].getNumber());
cardsMap[x1][y].setNumber(0);
x++;
addOne=true;

}else if(cardsMap[x][y].equals(cardsMap[x1][y])){
cardsMap[x][y].setNumber(cardsMap[x][y].getNumber()*2);
cardsMap[x1][y].setNumber(0);
MainActivity.getMainActivity().AddScore(cardsMap[x][y].getNumber());
addOne=true;
}
break;
}
}
}
}
if(addOne){
addRandomNumber();
finish();
}
}
private void slip_up(){
boolean addOne =false;
//向上滑动的构造方法
for (int x = 0; x < 4; x++) {
for (int y = 0; y < 4; y++) {

for (int y1 = y+1; y1 < 4; y1++) {
if (cardsMap[x][y1].getNumber()>0) {

if (cardsMap[x][y].getNumber()<=0) {
cardsMap[x][y].setNumber(cardsMap[x][y1].getNumber());
cardsMap[x][y1].setNumber(0);

y--;
addOne=true;
}else if (cardsMap[x][y].equals(cardsMap[x][y1])) {
cardsMap[x][y].setNumber(cardsMap[x][y].getNumber()*2);
cardsMap[x][y1].setNumber(0);
MainActivity.getMainActivity().AddScore(cardsMap[x][y].getNumber());
addOne=true;
}
break;
}
}
}
}
if(addOne){
addRandomNumber();
finish();
}
}
private void slip_down(){
boolean addOne =false;
for (int x = 0; x < 4; x++) {
for (int y = 3; y >=0; y--) {
for (int y1=y-1; y1>=0; y1--) {
if (cardsMap[x][y1].getNumber()>0) {

if (cardsMap[x][y].getNumber()<=0) {
cardsMap[x][y].setNumber(cardsMap[x][y1].getNumber());
cardsMap[x][y1].setNumber(0);
y++;
addOne=true;
}else if (cardsMap[x][y].equals(cardsMap[x][y1])) {
cardsMap[x][y].setNumber(cardsMap[x][y].getNumber()*2);
cardsMap[x][y1].setNumber(0);
MainActivity.getMainActivity().AddScore(cardsMap[x][y].getNumber());
addOne=true;
}
break;
}
}
}
}
if(addOne){
addRandomNumber();
finish();
}
}
private void finish(){
boolean complete=true;
ALL:
for (int y = 0; y < 4; y++) {
for (int x = 0; x < 4; x++) {
if(cardsMap[x][y].getNumber()==0||
x>0&&cardsMap[x][y].equals(cardsMap[x-1][y])||
x<3&&cardsMap[x][y].equals(cardsMap[x+1][y])||
y>0&&cardsMap[x][y].equals(cardsMap[x][y-1])||
y<3&&cardsMap[x][y].equals(cardsMap[x][y+1])){
complete=false;
break ALL;
}
}
}
if(complete){
new AlertDialog.Builder(getContext())
.setTitle("你好")
.setMessage("游戏结束")
.setPositiveButton("重新开始", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
// Intent intent=new Intent(GameView.this,FinishGame.class);
// startActivity(intent);

}
}).show();
}
}

// private void go_finish(){
// Intent intent=new Intent();
// }
private Card[][] cardsMap=new Card[4][4];
//创建一个构造方法用于存放卡片上的数字
private List<Point> emptyPoints=new ArrayList<Point>();
}

#12


引用 10 楼 u010668114 的回复:
贴一下错误信息?

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

#13


引用 12 楼 bingolalalalala 的回复:
Quote: 引用 10 楼 u010668114 的回复:

贴一下错误信息?

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


你那个intent第一个参数应该是context的子类
而你的GameView只是个layout不是一个context,一般context最常见是继承了activity

#14


引用 13 楼 inquisitive_plus 的回复:
Quote: 引用 12 楼 bingolalalalala 的回复:

Quote: 引用 10 楼 u010668114 的回复:

贴一下错误信息?

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


你那个intent第一个参数应该是context的子类
而你的GameView只是个layout不是一个context,一般context最常见是继承了activity

求问大神,这个该怎么改,能使用intent么??

#15


引用 14 楼 bingolalalalala 的回复:
求问大神,这个该怎么改,能使用intent么??

你可以给这个layout一个构造函数
在其他activity创建它的时候传入一个context
例如:
Activity里
GameView g=new GameView(this);

GameView里
Context context;//以后就用这个context就可以了
public GameView(Context context){
 this.context=context;
}

#16


引用 13 楼 inquisitive_plus 的回复:
Quote: 引用 12 楼 bingolalalalala 的回复:

Quote: 引用 10 楼 u010668114 的回复:

贴一下错误信息?

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


你那个intent第一个参数应该是context的子类
而你的GameView只是个layout不是一个context,一般context最常见是继承了activity

楼上正解,我就说你这个gameview应该不是activity吧,这句话的意思是没有定义参数是gameview和xxx的这个方法,重点是在没有这个方法,因为第一个参数是需要context,上下文,而不是一个view。

#17


引用 15 楼 inquisitive_plus 的回复:
Quote: 引用 14 楼 bingolalalalala 的回复:

求问大神,这个该怎么改,能使用intent么??

你可以给这个layout一个构造函数
在其他activity创建它的时候传入一个context
例如:
Activity里
GameView g=new GameView(this);

GameView里
Context context;//以后就用这个context就可以了
public GameView(Context context){
 this.context=context;
}

我修改了之后,没报错了,可是运行的时候当点击它的时候直接退出了。没有达到我想要的效果,求大神再费神分析下
	if(complete){
new AlertDialog.Builder(getContext())
.setTitle("你好")
.setMessage("游戏结束")
.setPositiveButton("重新开始", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
Intent intent=new Intent(GameView.context,FinishGame.class);
GameView.context.startActivity(intent);
}
}).show();
}
}

static Context context;//以后就用这个context就可以了
public void GameView(Context context){
 this.context=context;
}

#18


你代码写的好乱
public void GameView(Context context){
 this.context=context;
}
context你有赋值么
其次你的GameView不是有构造方法么:
public GameView(Context context) {
super(context);
initGameView();
this.context=context;
}
确保是用可见activity进行跳转,不是乱跳转

#19


引用 18 楼 inquisitive_plus 的回复:
你代码写的好乱
public void GameView(Context context){
 this.context=context;
}
context你有赋值么
其次你的GameView不是有构造方法么:
public GameView(Context context) {
super(context);
initGameView();
this.context=context;
}
确保是用可见activity进行跳转,不是乱跳转


引用 18 楼 inquisitive_plus 的回复:
你代码写的好乱
public void GameView(Context context){
 this.context=context;
}
context你有赋值么
其次你的GameView不是有构造方法么:
public GameView(Context context) {
super(context);
initGameView();
this.context=context;
}
确保是用可见activity进行跳转,不是乱跳转
关于alertDialog监听问题,android新手,求助各位大神新手,这些构造方法不是很懂,就是乱敲,望大神不惜赐教

#1


贴下FinishGame和GameView是怎么定义的?
activit没注册?

#2


引用 1 楼 inquisitive_plus 的回复:
贴下FinishGame和GameView是怎么定义的?
activit没注册?

注册了。 finishGame
public class FinishGame extends Activity {
private Button reStart,list;
private TextView finishScore;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.finish_activity);

reStart=(Button) findViewById(R.id.return_start);
list=(Button)findViewById(R.id.go_list);
finishScore=(TextView)findViewById(R.id.TvScore);
reStart.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Intent intent=new Intent(FinishGame.this,StartGame.class);
startActivity(intent);

}
});
}

}

#3


是编译错误么?clean一下

#4


楼主好牛啊!你是怎么装上Android sdk包的?我为什么总是出fetching http......的问题?就是怎么连上谷歌的服务器?非要*不可吗?还要装Android Studio吗?我买了一本Android编程的书,Android Studio只字未提。楼主都能自学成才了,羡慕加敬佩啊,教教我吧,鹅滴哥。

#5


你的gameview不会就是个view   不是activity吧?还有注册是要在manifefest里哦

#6


引用 5 楼 u010668114 的回复:
你的gameview不会就是个view   不是activity吧?还有注册是要在manifefest里哦

。。不是View  ,是activity。注册过了,就是那个地方调用alertDialog时,设置Button,无法使用Intent的方法,报错是undifined。不懂哪出问题了

#7


引用 3 楼 inquisitive_plus 的回复:
是编译错误么?clean一下

不是呀,其他地方都没什么问题,我不太理解AlertDialog,监听的使用,特来求助

#8


引用 4 楼 u012551935 的回复:
楼主好牛啊!你是怎么装上Android sdk包的?我为什么总是出fetching http......的问题?就是怎么连上谷歌的服务器?非要*不可吗?还要装Android Studio吗?我买了一本Android编程的书,Android Studio只字未提。楼主都能自学成才了,羡慕加敬佩啊,教教我吧,鹅滴哥。

我是直接下载一个Adt bundle 的直接用就行啦。

#9


引用 7 楼 bingolalalalala 的回复:
不是呀,其他地方都没什么问题,我不太理解AlertDialog,监听的使用,特来求助

代码没什么问题
我猜测,你是想在其他地方使用这段代码

if(complete){
new AlertDialog.Builder(getContext())
.setTitle("你好")
.setMessage("游戏结束")
.setPositiveButton("确定", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
Intent intent=new Intent(GameView.this,FinishGame.class);
我使用Intent传递,可是报错提示 GameView,和FinishGame未定义
startActivity(intent);

}
}).show();


GameView,和FinishGame未定义这个是编译错误?
GameView.this无法离开GameView所处的类,
随意使用GameView.this可能会报
No enclosing instance of the type GameView is accessible in scope

工具类调用是,方法一般都提供一个context参数,这样AlertDialog就知道是哪里提供的了
FinishGame.class应该不会报错,只要你有这个类。

#10


贴一下错误信息?

#11


引用 9 楼 inquisitive_plus 的回复:
Quote: 引用 7 楼 bingolalalalala 的回复:

不是呀,其他地方都没什么问题,我不太理解AlertDialog,监听的使用,特来求助

代码没什么问题
我猜测,你是想在其他地方使用这段代码

if(complete){
new AlertDialog.Builder(getContext())
.setTitle("你好")
.setMessage("游戏结束")
.setPositiveButton("确定", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
Intent intent=new Intent(GameView.this,FinishGame.class);
我使用Intent传递,可是报错提示 GameView,和FinishGame未定义
startActivity(intent);

}
}).show();


GameView,和FinishGame未定义这个是编译错误?
GameView.this无法离开GameView所处的类,
随意使用GameView.this可能会报
No enclosing instance of the type GameView is accessible in scope

工具类调用是,方法一般都提供一个context参数,这样AlertDialog就知道是哪里提供的了
FinishGame.class应该不会报错,只要你有这个类。


谢谢帮忙,可是还是有点不懂,我把GameView的代码贴一下,求大神解答
package hlju.daniel.game2048edition;

import java.util.ArrayList;
import java.util.List;

import hlju.daniel.game2048edition.MainActivity;

import android.app.AlertDialog;
import android.app.Notification.Action;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Point;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.GridLayout;


public class GameView extends GridLayout {

// 添加GameView的3个构造方法
public GameView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
initGameView();
}

public GameView(Context context, AttributeSet attrs) {
super(context, attrs);
initGameView();
}

public GameView(Context context) {
super(context);
initGameView();
}

// 添加一个初始化的构造方法
private void initGameView() {
setColumnCount(4);
setBackgroundColor(0xffbbada0);

setOnTouchListener(new View.OnTouchListener() {
private float start_X, start_Y, offset_X, offset_Y;

@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
start_X = event.getX();
start_Y = event.getY();
break;
case MotionEvent.ACTION_UP:
offset_X = event.getX() - start_X;
offset_Y = event.getY() - start_Y;



if (Math.abs(offset_X) > Math.abs(offset_Y)) {
if (offset_X < -20) {
slip_left();
System.out.println("right");

} else if (offset_X > 20) {
slip_right();
System.out.println("left");
}
}else{
if(offset_Y<-20){
slip_up();
System.out.println("up");

}else if(offset_Y>20){
slip_down();
System.out.println("down");

}
}
break;
}
return true;
}
});
}
@Override
//设置卡片的宽高
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
int cardWidth=(int)(Math.min(w, h)-10)/4;
addCards(cardWidth, cardWidth);
startGame();

}
private void addCards(int cardWidth,int cardHeigh){
//添加卡片的方法
Card c;
for (int y = 0; y < 4; y++) {
for (int x = 0; x < 4; x++) {
c=new Card(getContext());
c.setNumber(0);
addView(c, cardWidth, cardHeigh);
cardsMap[x][y]=c;
}

}
}
private void startGame(){
MainActivity.getMainActivity().chearScore();
for (int y = 0; y < 4; y++) {
for (int x = 0; x < 4; x++) {
cardsMap[x][y].setNumber(0);
}
}
addRandomNumber();
addRandomNumber();
}
private void addRandomNumber(){

emptyPoints.clear();
for (int y = 0; y < 4; y++) {
for (int x = 0; x < 4; x++) {
if(cardsMap[x][y].getNumber()<=0){
emptyPoints.add(new Point(x,y));

}
}
}
Point p=emptyPoints.remove((int)(Math.random()*emptyPoints.size()));
cardsMap[p.x][p.y].setNumber(Math.random()>0.1?2:4);
}



private void slip_left(){
//设定一个addOne判断是否需要添加Cards
boolean addOne =false;
//向左滑的构造方法
for (int y = 0; y < 4; y++) {
for (int x = 0; x < 4; x++) {

for (int x1 = x+1; x1 < 4; x1++) {
if(cardsMap[x1][y].getNumber()>0){


if(cardsMap[x][y].getNumber()<=0){
cardsMap[x][y].setNumber(cardsMap[x1][y].getNumber());
cardsMap[x1][y].setNumber(0);
x--;
addOne=true;
}else if(cardsMap[x][y].equals(cardsMap[x1][y])){
cardsMap[x][y].setNumber(cardsMap[x][y].getNumber()*2);
cardsMap[x1][y].setNumber(0);
MainActivity.getMainActivity().AddScore(cardsMap[x][y].getNumber());
addOne=true;
}
break;
}
}
}
}
if(addOne){
addRandomNumber();
finish();
}
}
private void slip_right(){
boolean addOne =false;
//向右滑动构造方法
for (int y = 0; y < 4; y++) {
for (int x=3; x >=0; x--) {

for (int x1 = x-1; x1 >=0; x1--) {
if(cardsMap[x1][y].getNumber()>0){


if(cardsMap[x][y].getNumber()<=0){
cardsMap[x][y].setNumber(cardsMap[x1][y].getNumber());
cardsMap[x1][y].setNumber(0);
x++;
addOne=true;

}else if(cardsMap[x][y].equals(cardsMap[x1][y])){
cardsMap[x][y].setNumber(cardsMap[x][y].getNumber()*2);
cardsMap[x1][y].setNumber(0);
MainActivity.getMainActivity().AddScore(cardsMap[x][y].getNumber());
addOne=true;
}
break;
}
}
}
}
if(addOne){
addRandomNumber();
finish();
}
}
private void slip_up(){
boolean addOne =false;
//向上滑动的构造方法
for (int x = 0; x < 4; x++) {
for (int y = 0; y < 4; y++) {

for (int y1 = y+1; y1 < 4; y1++) {
if (cardsMap[x][y1].getNumber()>0) {

if (cardsMap[x][y].getNumber()<=0) {
cardsMap[x][y].setNumber(cardsMap[x][y1].getNumber());
cardsMap[x][y1].setNumber(0);

y--;
addOne=true;
}else if (cardsMap[x][y].equals(cardsMap[x][y1])) {
cardsMap[x][y].setNumber(cardsMap[x][y].getNumber()*2);
cardsMap[x][y1].setNumber(0);
MainActivity.getMainActivity().AddScore(cardsMap[x][y].getNumber());
addOne=true;
}
break;
}
}
}
}
if(addOne){
addRandomNumber();
finish();
}
}
private void slip_down(){
boolean addOne =false;
for (int x = 0; x < 4; x++) {
for (int y = 3; y >=0; y--) {
for (int y1=y-1; y1>=0; y1--) {
if (cardsMap[x][y1].getNumber()>0) {

if (cardsMap[x][y].getNumber()<=0) {
cardsMap[x][y].setNumber(cardsMap[x][y1].getNumber());
cardsMap[x][y1].setNumber(0);
y++;
addOne=true;
}else if (cardsMap[x][y].equals(cardsMap[x][y1])) {
cardsMap[x][y].setNumber(cardsMap[x][y].getNumber()*2);
cardsMap[x][y1].setNumber(0);
MainActivity.getMainActivity().AddScore(cardsMap[x][y].getNumber());
addOne=true;
}
break;
}
}
}
}
if(addOne){
addRandomNumber();
finish();
}
}
private void finish(){
boolean complete=true;
ALL:
for (int y = 0; y < 4; y++) {
for (int x = 0; x < 4; x++) {
if(cardsMap[x][y].getNumber()==0||
x>0&&cardsMap[x][y].equals(cardsMap[x-1][y])||
x<3&&cardsMap[x][y].equals(cardsMap[x+1][y])||
y>0&&cardsMap[x][y].equals(cardsMap[x][y-1])||
y<3&&cardsMap[x][y].equals(cardsMap[x][y+1])){
complete=false;
break ALL;
}
}
}
if(complete){
new AlertDialog.Builder(getContext())
.setTitle("你好")
.setMessage("游戏结束")
.setPositiveButton("重新开始", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
// Intent intent=new Intent(GameView.this,FinishGame.class);
// startActivity(intent);

}
}).show();
}
}

// private void go_finish(){
// Intent intent=new Intent();
// }
private Card[][] cardsMap=new Card[4][4];
//创建一个构造方法用于存放卡片上的数字
private List<Point> emptyPoints=new ArrayList<Point>();
}

#12


引用 10 楼 u010668114 的回复:
贴一下错误信息?

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

#13


引用 12 楼 bingolalalalala 的回复:
Quote: 引用 10 楼 u010668114 的回复:

贴一下错误信息?

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


你那个intent第一个参数应该是context的子类
而你的GameView只是个layout不是一个context,一般context最常见是继承了activity

#14


引用 13 楼 inquisitive_plus 的回复:
Quote: 引用 12 楼 bingolalalalala 的回复:

Quote: 引用 10 楼 u010668114 的回复:

贴一下错误信息?

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


你那个intent第一个参数应该是context的子类
而你的GameView只是个layout不是一个context,一般context最常见是继承了activity

求问大神,这个该怎么改,能使用intent么??

#15


引用 14 楼 bingolalalalala 的回复:
求问大神,这个该怎么改,能使用intent么??

你可以给这个layout一个构造函数
在其他activity创建它的时候传入一个context
例如:
Activity里
GameView g=new GameView(this);

GameView里
Context context;//以后就用这个context就可以了
public GameView(Context context){
 this.context=context;
}

#16


引用 13 楼 inquisitive_plus 的回复:
Quote: 引用 12 楼 bingolalalalala 的回复:

Quote: 引用 10 楼 u010668114 的回复:

贴一下错误信息?

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


你那个intent第一个参数应该是context的子类
而你的GameView只是个layout不是一个context,一般context最常见是继承了activity

楼上正解,我就说你这个gameview应该不是activity吧,这句话的意思是没有定义参数是gameview和xxx的这个方法,重点是在没有这个方法,因为第一个参数是需要context,上下文,而不是一个view。

#17


引用 15 楼 inquisitive_plus 的回复:
Quote: 引用 14 楼 bingolalalalala 的回复:

求问大神,这个该怎么改,能使用intent么??

你可以给这个layout一个构造函数
在其他activity创建它的时候传入一个context
例如:
Activity里
GameView g=new GameView(this);

GameView里
Context context;//以后就用这个context就可以了
public GameView(Context context){
 this.context=context;
}

我修改了之后,没报错了,可是运行的时候当点击它的时候直接退出了。没有达到我想要的效果,求大神再费神分析下
	if(complete){
new AlertDialog.Builder(getContext())
.setTitle("你好")
.setMessage("游戏结束")
.setPositiveButton("重新开始", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
Intent intent=new Intent(GameView.context,FinishGame.class);
GameView.context.startActivity(intent);
}
}).show();
}
}

static Context context;//以后就用这个context就可以了
public void GameView(Context context){
 this.context=context;
}

#18


你代码写的好乱
public void GameView(Context context){
 this.context=context;
}
context你有赋值么
其次你的GameView不是有构造方法么:
public GameView(Context context) {
super(context);
initGameView();
this.context=context;
}
确保是用可见activity进行跳转,不是乱跳转

#19


引用 18 楼 inquisitive_plus 的回复:
你代码写的好乱
public void GameView(Context context){
 this.context=context;
}
context你有赋值么
其次你的GameView不是有构造方法么:
public GameView(Context context) {
super(context);
initGameView();
this.context=context;
}
确保是用可见activity进行跳转,不是乱跳转


引用 18 楼 inquisitive_plus 的回复:
你代码写的好乱
public void GameView(Context context){
 this.context=context;
}
context你有赋值么
其次你的GameView不是有构造方法么:
public GameView(Context context) {
super(context);
initGameView();
this.context=context;
}
确保是用可见activity进行跳转,不是乱跳转
关于alertDialog监听问题,android新手,求助各位大神新手,这些构造方法不是很懂,就是乱敲,望大神不惜赐教

#20