我有一個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