我正在開發一個棋盤遊戲應用程序(與國際象棋類似)。我有活動GameBoardActivity,它偵聽GridView上的點擊,並且每次點擊時都會從類Game中調用函數來處理應該發生的事情。從非活動類中調用的自定義對話框中檢索信息
課內遊戲是關於作品在哪裏的數據,以及處理作品移動的方法Move(int xFrom, int yFrom, int xTo, int yTo)
。
對於用戶可能指定的某些移動(例如,xFrom,yFrom的片段應該轉到xTo,yTo),我想爲它們提供兩個選項之間的選擇。你可以想象,一種選擇是正常的去那裏,另一種是去那裏作爲一個變形的片斷。要做到這一點,我想顯示一個自定義對話框,顯示用戶點擊的兩個選項。下面
我的自定義對話框類給出:
public class CustomDialog extends Dialog implements View.OnClickListener{
Context mcontext;
Button button1;
Button button2;
int choice; //holds value of user's choice
public CustomDialog(Context context) {
super(context);
mcontext = context;
button1 = (Button) findViewById(R.id.button1);
button2 = (Button) findViewById(R.id.button2);
choice = 0; //no choice yet
}
public void setLayout(){
this.setContentView(R.layout.custom_dialog);
button1.setOnClickListener(this);
button2.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.button1:
choice = 1;
break;
case R.id.button2:
choice = 2;
break;
}
dismiss();
}
}
我不上是如何通過對用戶的選擇將信息反饋給類遊戲清楚。
任何幫助,非常感謝。
我是試圖實現這個建議(使用對遊戲的引用,而不是活動,因爲該對話框是由Activity引用的類Game創建的),但是我爲這些按鈕設置onClickListener的那一行給了我一個空指針異常。我無法弄清楚爲什麼...有什麼想法? – Rookatu 2013-04-27 05:07:34
@Rookatu你需要引用一個Activity對象,而不是任何其他對象。 – 2013-04-27 05:14:20
嘿user117。我修復了空指針異常(在調用setContentView之前先啓動按鈕,萬一有人奇怪),並且儘管只引用了Game對象而不是活動,但您的想法似乎仍然有效。爲什麼它應該是一個活動呢?另外,我是否應該擔心通過引用這些大對象來消耗內存,或者當對話框關閉時垃圾收集器是否會照顧它? – Rookatu 2013-04-27 05:25:19