我有一个GridView
设置,并且我已经实现了setOnItemClickListener
接口的一个方法。首先,我已经做了一些Toast
只是为了反馈,然后我转移到调用我的方法第一种方法,我把它放到一个while循环中,它会调用它,直到它返回true
。第二种方法,当插入代码时,阻止第一种方法工作,但我不。得到任何编译器错误如何调用一个`setOnItemClickListener(...`
这是我onCreate
含有我想setOnItemClickListener()
我的第二个方法插入注释:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
GridView gridview = (GridView) findViewById(R.id.gridview);
gridview.setAdapter(new ImageAdapter(this));
final GameplayController gc = new GameplayController(this);
// Create board model, add units to player's list.
final UnitArray gameBoardModel = new UnitArray();
gridview.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v,
int position, long id) {
Toast.makeText(MainActivity.this, "" + position,
Toast.LENGTH_SHORT).show();
boolean next = false;
while (next == false) {
next = gc.choosePiece(position, gameBoardModel,
(ImageView) v);
}
/*next = false;
while (next == false) {
next = gc.chooseEmpty(position, gameBoardModel,
(ImageView) v);
}*/
}
});
}
我说的第一种方法“有点儿”的作品,因为它是将检查在选择的GridView
的位置是“容许”的选择和将更新ImageView
那个选择,然后return true
的方法,否则它将return false
的想法是,它会循环,直到用户做出“有效”的选择。现在,如果进行了有效的选择,它确实会相应地更新ImageView
,但是当进行“无效”选择时,它会冻结。
所以它“有点”起作用,但是当我插入我的第二个方法时,即使进行了“有效”选择,它也会冻结,并且它永远不会变成第二种方法。
我想我有一些关于onItemClickListener()
的信息。
--------------------------编辑-------------------附录--------------
万一它有助于看到的第一个方法我打电话,
public boolean choosePiece(int position, UnitArray ua, ImageView iv) {
if (ua.checkPiece(pNum, position) == true) {
if (ua.checkType(position, "rock")) {
ImageView v = iv;
v.setImageResource(R.drawable.rock1select);
return true;
}
if (ua.checkType(position, "paper")) {
iv.setImageResource(R.drawable.paper1select);
return true;
}
if (ua.checkType(position, "scissors")) {
iv.setImageResource(R.drawable.scissors1select);
return true;
}
}
/*
* With just the IF statements above catching the correct selections, my
* program crashes. I thought simply adding the RETURN FALSE; to catch
* everything else would work since it should just keep looping from the
* mAINaCTIVITY until it hits one of them and RETURNS TRUE;. So I will
* add this ELSE so that it will just redraw what is already there,
* maybe that will fix it? Like, maybe it really really wants to use the
* freaking listener for something.
*
* Nope, that didn't help at all.
*/
else {
System.out.println("Ohhhh, NO YOU DIDN'T!!!");
if (ua.checkType(position, "rock")) {
System.out.println("Bad rock!, BAD!");
ImageView v = iv;
v.setImageResource(R.drawable.rock2);
return false;
}
if (ua.checkType(position, "paper")) {
ImageView v = iv;
v.setImageResource(R.drawable.paper2);
return false;
}
if (ua.checkType(position, "scissors")) {
ImageView v = iv;
v.setImageResource(R.drawable.scissors2);
return false;
}
if (ua.checkType(position, "empty")) {
ImageView v = iv;
v.setImageResource(R.drawable.blank);
return false;
}
}
return false;
}
也许有在这里,我要补充的东西告诉onItemClick..
继续前进并停止发送触摸事件?
它“冻结”,因为它会陷入无限循环。在两个while循环中,如果完成检查但未找到有效位置,则没有指定要执行的操作。 – Neoh 2013-04-26 08:27:19
如何指定完成检查时要执行的操作?我已经返回到下一个代码,或返回false返回到另一轮。还有什么我必须与'onItemClickListener'沟通让它知道继续前进? – ChrisWilson4 2013-04-26 08:47:22