2012-03-16 32 views
0

我詢問是否有人可以幫我解決我的問題,那就是我在java類中有一個自定義對話框。這個自定義對話框有一個按鈕,當按下它時會調用我的活動類中的一個方法。當我運行代碼時什麼都沒有發生,似乎這個方法從來沒有被調用,也沒有給出任何錯誤,因爲我嘗試這種方法的原因是因爲Java類被用於overlayitems。下面是代碼的SNIPPIT我有,歡呼聲給任何人overlayitem來自java類的調用活動方法

public boolean onTap(int index) { 
    OverlayItem item = mapOverlays.get(index); 
    Dialog dialog = new Dialog(context); 

    dialog.setContentView(R.layout.dialog); 
    dialog.setTitle(item.getTitle()); 

    TextView text = (TextView) dialog.findViewById(R.id.text); 
    text.setText(item.getSnippet()); 
    Button CallButton = (Button) dialog.findViewById(R.id.CallButton); 
    CallButton.setOnClickListener(new View.OnClickListener() 
    { 
     public void onClick(View v) 
     { 
      try { 
       TheActivityClass.showMessage(); 
      } catch (Exception e) { 
       // TODO Auto-generated catch block 

      } 
     } 
    } 
    ); 
    dialog.show(); 
    return true; 

} 

活動課

public void showMessage(){ 



     Context context = getApplicationContext(); 
     CharSequence text = "I have just been pressed"; 
     int duration = Toast.LENGTH_SHORT; 

     Toast toast = Toast.makeText(context, text, duration); 
     toast.show(); 


    } 
+0

通過在showMessage中寫入一些日誌語句或sysout語句來檢查它,並檢查它們是否反映在logcat中。 – 2012-03-16 14:32:57

+0

從記錄一些東西開始捕捉。那麼認爲你是靜態調用一個非靜態方法。最後,試着看看你對視圖中的活動可能有什麼參考(上下文,可能是?) – njzk2 2012-03-16 14:36:11

+0

你能編譯它嗎?看起來像你試圖調用一個靜態(類)方法,但只有一個實例方法聲明。 – tidbeck 2012-03-16 14:43:14

回答

0

你有一個封裝問題誰對問題

的Java類的洞察力。活動類不在當前堆棧的頂部,而showMessage()方法不是靜態的。

您應該在Activity類中控制應用程序邏輯,而不是Java overlay類(遵循MVVM邏輯,即活動是您的控制器的MVC)。最好的選擇是將對話/覆蓋對象封裝在Activity中,並在Activity類中設置邏輯(在覆蓋類中創建合適的方法來完成此操作),或者只是創建Activity的覆蓋和內部類。這將允許你做你想做的事情。

希望有所幫助。