2013-04-27 26 views
0

我正在開發一個棋盤遊戲應用程序(與國際象棋類似)。我有活動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(); 
} 
} 

我不上是如何通過對用戶的選擇將信息反饋給類遊戲清楚。

任何幫助,非常感謝。

回答

1

經由對話的構造保存到父活動的引用:

private final MyActivity mCaller; 

public CustomDialog(MyActivity caller) { 
    super(caller); 
    mCaller = caller; 

    //....... 
} 

值傳遞給調用它的方法調用活動:

@Override 
public void onClick(View v) { 

    switch(v.getId()){ 
    case R.id.button1: 
     mCaller.setChoice(1); 
     break; 
    case R.id.button2: 
     mCaller.setChoice(2); 
     break; 
    } 
    dismiss(); 
} 
+0

我是試圖實現這個建議(使用對遊戲的引用,而不是活動,因爲該對話框是由Activity引用的類Game創建的),但是我爲這些按鈕設置onClickListener的那一行給了我一個空指針異常。我無法弄清楚爲什麼...有什麼想法? – Rookatu 2013-04-27 05:07:34

+0

@Rookatu你需要引用一個Activity對象,而不是任何其他對象。 – 2013-04-27 05:14:20

+0

嘿user117。我修復了空指針異常(在調用setContentView之前先啓動按鈕,萬一有人奇怪),並且儘管只引用了Game對象而不是活動,但您的想法似乎仍然有效。爲什麼它應該是一個活動呢?另外,我是否應該擔心通過引用這些大對象來消耗內存,或者當對話框關閉時垃圾收集器是否會照顧它? – Rookatu 2013-04-27 05:25:19

0

用於存儲按鈕操作創建bean類... 雖然點擊事件將其存儲在一個bean中 在遊戲類中,您可以訪問Bean類中按鈕的動作值