Java 输入仅在Android中工作一次
类似这样的问题(ID 1606993)已经发布,但并没有真正回答我的问题,所以下面是: 在我正在创建的Android应用程序中,用户必须从键盘输入数字,应用程序才能继续。输入完号码后,他们可以按回车键或主按钮。问题是,它只工作一次 以下是我的倾听方法:Java 输入仅在Android中工作一次,java,android,input,Java,Android,Input,类似这样的问题(ID 1606993)已经发布,但并没有真正回答我的问题,所以下面是: 在我正在创建的Android应用程序中,用户必须从键盘输入数字,应用程序才能继续。输入完号码后,他们可以按回车键或主按钮。问题是,它只工作一次 以下是我的倾听方法: public boolean onKeyDown(int key, KeyEvent event)//Listens for key events { if(key==KeyEvent.KEYCODE_0) add(0);
public boolean onKeyDown(int key, KeyEvent event)//Listens for key events
{
if(key==KeyEvent.KEYCODE_0)
add(0);
else if(key==KeyEvent.KEYCODE_1)
add(1);
else if(key==KeyEvent.KEYCODE_2)
add(2);
else if(key==KeyEvent.KEYCODE_3)
add(3);
else if(key==KeyEvent.KEYCODE_4)
add(4);
else if(key==KeyEvent.KEYCODE_5)
add(5);
else if(key==KeyEvent.KEYCODE_6)
add(6);
else if(key==KeyEvent.KEYCODE_7)
add(7);
else if(key==KeyEvent.KEYCODE_8)
add(8);
else if(key==KeyEvent.KEYCODE_9)
add(9);
else if(key==KeyEvent.KEYCODE_ENTER)
setNum();
else if(key==KeyEvent.KEYCODE_DPAD_CENTER)
setNum();
return true;
}
add(intnumb)方法将num添加到占据屏幕的文本字段中,这不会导致任何问题
这是setNum():
protectedvoid setNum()//设置该数字并告诉运行程序该数字已设置。
{
如果(光线大小()==1)
num=ray.get(0);
else if(ray.size()==0)
num=0;
其他的
num=(ray.get(0)*10)+ray.get(1);
ray=new ArrayList();//或者ray.clear(),我都试过了
就绪=正确;
}
ArryayList ray是存储数字的地方。计算进行得很顺利。
Int num是代码使用的数字。布尔就绪是存在的,因为在runner类中有一个while循环等待ready为true以继续代码
while(!a.ready)
{
for(int x=0;x<100;x++);
}
while(!a.ready)
{
对于(int x=0;x公共类MyView{
int-num;
int currentState=1;//如果使用Enum,
//但我现在会保持简单。
公共布尔onKeyDown(int键、KeyEvent事件){
//这里没有变化
}
受保护的void setNum(){
如果(光线大小()==1)
num=ray.get(0);
else if(ray.size()==0)
num=0;
其他的
num=(ray.get(0)*10)+ray.get(1);
ray=新的ArrayList();
if(currentState==1)/(TODO:这里应该真正使用Enum…)
第1部分();
else if(currentState==2)
第2部分();
否则如果。。。
}
无效第1部分(){
addText(“这是怀特的举动”);
addText(“可能移动的碎片”);
对于(int x=0;xRunner循环的意义是什么?它不只是作为一个无限循环存在吗?还是在一个异步线程中?处理类似事件的更好方法是使用广播接收器什么部分第二次不工作?错误?异常?错误号码?没有号码?无限循环?恶魔?@John:我试着暂停它以等待一个我来自主活动的消息,但这开始引发中断的异常。如果有帮助,Runner类确实会向主类发送消息。请尝试调试setNum函数,查看ray中的内容。只需在设备上以调试模式启动应用程序,并在if语句顶部设置断点即可。我们正在我来帮忙。谢谢Ishtar,这比我所做的更有意义!
while(!a.ready)
{
for(int x=0;x<100;x++);
}
while(!go)
{
addText("It is White's move");
addText("Possible pieces to move");
for(int x=0;x<b.getWhite().getPiecesWithMoves(b).size();x++)//Loop to print White's pieces that can move
{
addText(""+(x+1)+") "+b.getWhite().getPiecesWithMoves(b).get(x));
}
got=false;
p=0;
while(!got)//Loop to enter number
{
addText("Input the number of the piece you want to move");
while(!a.ready)
{
for(int x=0;x<100;x++);
}
p=a.num-1;
if(p<b.getWhite().getPiecesWithMoves(b).size()&&p>=0)//Checks to make sure that p is valid
got=true;
a.num=0;
a.ready=false;
}
gl=b.getWhite().getPiecesWithMoves(b).get(p).getLocation();//Makes a location that is where the piece currently is
addText("Possible moves");
for(int x=0;x<b.getPiece(gl).getMoves(b).size();x++)//Loop to print where the piece can go
{
addText(""+(x+1)+") "+b.genL(b.getPiece(gl).getMoves(b).get(x)));
}
got=false;//reset
while(!got)//Loop to enter number
{
addText("Input the number of one of these moves.");
addText("If you wish to change, enter 0.");
while(!a.ready)
{
for(int x=0;x<100;x++);
}
p=a.num-1;
if(p==-1)
got=true;
else if(p<b.getPiece(gl).getMoves(b).size()&&p>=0)//Checks to make sure that p is valid
{
got=true;
go=true;
}
a.num=0;
a.ready=false;
}
}
gk=b.getPiece(gl).getMoves(b).get(p);//The location that the piece is going to
b.move(gk, b.getPiece(gl),gk.isTaken(),gk.isCastle());//Moves the piece
public class MyView {
int num;
int currentState = 1; //much, much more pretty if you'd use Enum,
//but I'll keep it simple now.
public boolean onKeyDown(int key, KeyEvent event) {
//no changes here
}
protected void setNum(){
if(ray.size()==1)
num=ray.get(0);
else if(ray.size()==0)
num=0;
else
num=(ray.get(0)*10)+ray.get(1);
ray=new ArrayList<Integer>();
if (currentState == 1) //(TODO:should really use Enum here....)
part1();
else if (currentState == 2)
part2();
else if (...
}
void part1() {
addText("It is White's move");
addText("Possible pieces to move");
for(int x=0;x<b.getWhite().getPiecesWithMoves(b).size();x++)
{
addText(""+(x+1)+") "+b.getWhite().getPiecesWithMoves(b).get(x));
}
addText("Input the number of the piece you want to move");
currentState = 2;//now we do nothing, we wait untill user finishes input
}
void part2()
{//will be called after part1 finishes and a number has been entered
p=a.num-1;
if(p<b.getWhite().getPiecesWithMoves(b).size()&&p>=0) {
gl=b.getWhite().getPiecesWithMoves(b).get(p).getLocation();
addText("Possible moves");
//and more code
//Need input? stop and set next entry point
currentState = 3;//continue to part 3
}
else
{
addText("Input the number of the piece you want to move");
currentState = 2;//oops, stay at part2, we didn't get a good number!
}
}
}