gpt4 book ai didi

java - 如何在 `setOnItemClickListener(...` 内调用多个方法

转载 作者:行者123 更新时间:2023-12-02 07:04:49 24 4
gpt4 key购买 nike

我有一个 GridView 设置,并且我已经实现了 setOnItemClickListener 接口(interface)。首先,我做了一些 Toast 只是为了反馈,然后我继续调用我的方法。第一种方法有效,我将其放入 while 循环中,该循环将调用它,直到它返回 true。第二种方法在插入代码时会完全阻止第一种方法工作,但我没有收到任何编译器错误。

这是我的 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 在该选择上,然后返回 true,否则它将返回 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.. 继续并停止在此处发送触摸事件?

最佳答案

假设您知道 GameplayController 将查看的元素数量:

boolean found = false;
int size = numberOfElements;
for(int i=0; i<size;i++) {
if(gc.choosePiece(position, gameBoardModel,(ImageView) v)==true) {
found = true;
break;
}
}
if(found) {
// do what u expect
}

关于java - 如何在 `setOnItemClickListener(...` 内调用多个方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16231511/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com