2012-03-06 26 views
0

我有一個對象「A」Android:從彈出窗口中,如何在啓動彈出窗口的對象中調用方法?

「A」發起彈出窗口

即彈出窗口在其內具有一個按鈕的顯示。

我希望在彈出窗口中的按鈕啓動對「A」中方法的調用。

我想發起從低於代碼的線路的呼叫說:

「//這裏我要調用的方法,‘A’,從這個彈出被宣佈」

一般說怎麼才能從彈出窗口中調用聲明彈出窗口的對象中的方法?這似乎是太容易了,但我很喜歡這個OO東西的新手。

如果這個解釋令人困惑,我會很樂意修飾。

public EventsOverlay A = new EventsOverlay(a, b)) 
class EventsOverlay extends ItemizedOverlay<OverlayItem> { 

      private PrePopupPanel panel=new PrePopupPanel(R.layout.preview1); 
       @Override 
     protected boolean onTap(int index) { 


       panel.show(true); 
      return true; 
     } 

... 

}結束EventsOverly類

class PrePopupPanel { 
      View popup; 
      boolean isVisible=false; 

      PrePopupPanel(int layout) { 
       ViewGroup parent=(ViewGroup)mapView.getParent(); 

       popup=getLayoutInflater().inflate(layout, parent, false); 
       popup.setOnClickListener(new View.OnClickListener() { 
       public void onClick(View v) { 
        hide(); 
       } 
       }); 

      ImageButton infobtn = (ImageButton)popup.findViewById(R.id.button1); 
       infobtn.setOnClickListener(new OnClickListener() 
       { 
        public void onClick(View v) 
        { 
         hide(); 

// RIGHT HERE I WANT TO CALL A METHOD IN "A" from which this popup was declared 


        } 
      }); 

...其他的方法,如顯示(),隱藏()等等......從別人

回答

0

使用Android Dialog methods.

複製在onCreateDialog中,您可以傳遞對自定義對象的引用,並在用戶單擊按鈕時觸發所需的任何方法。然後在您的活動代碼中的任何地方撥打showDialog()

1

使用接口來執行此操作。

- A類應實現的接口

- 它傳遞給PrePopupPanel。

- 通過接口對象調用方法。

接口 package com.demo.interface;

public interface ICallHandler { 

public void show(String show); 

} 

class EventsOverlay extends ItemizedOverlay<OverlayItem> implements ICallHandler{ 

     private PrePopupPanel panel=new PrePopupPanel(R.layout.preview1,this); 
      @Override 
    protected boolean onTap(int index) { 


      panel.show(true); 
     return true; 
    } 

PrePopupPanel

Class PrePopupPanel { 
     View popup; 
     boolean isVisible=false; 
     ICallHandler mHandler; 
     PrePopupPanel(int layout, ICallHandler callHandler) { 
      mHandler = callHandler; 
      ViewGroup parent=(ViewGroup)mapView.getParent(); 

      popup=getLayoutInflater().inflate(layout, parent, false); 
      popup.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       hide(); 
      } 
      }); 

     ImageButton infobtn = (ImageButton)popup.findViewById(R.id.button1); 
      infobtn.setOnClickListener(new OnClickListener() 
      { 
       public void onClick(View v) 
       { 
        hide(); 

// RIGHT HERE I WANT TO CALL A METHOD IN "A" from which this popup was declared 
        mHandler.show(); 

       } 
     }); 
+0

謝謝你。我確信這是我正在尋找的答案,但我仍然試圖繞過它(這是新的)。我正在閱讀公共界面。在此期間,我想知道從「mCallHandler mHandler」行開始的PrePopupPanel中的mCallHandler的位置被定義爲什麼? Eclipse爲我提供了一個將其定義爲公共接口的機會,但我很困惑。無論如何,感謝您關於對象間通信的關鍵洞察。 – Ray 2012-03-07 05:07:09

+0

好的。按照您的指示,將ICallHandler更改爲mCallHandler,並將其中的所有工作都插入其中!我看到這個問題問幾個地方沒有答案,所以這裏是人。現在我只需要研究這個,直到我完全理解它! – Ray 2012-03-07 05:39:56

+0

對不起。這是ICallHandler mHandler;現在改變:)謝謝:) – user936414 2012-03-09 04:11:09

1

你的類是另一個裏面,你可以訪問你的父母的所有成員方法。

+0

對不起我的錯......我顯示的代碼片段的方式確實顯示了其中一個類。 prepopuppanel不在事件重疊中。我試圖通過代碼的顯示方式來解決這個問題。 – Ray 2012-03-07 04:18:34

+0

USER 936414爲您提供合適的解決方案。 – 2012-03-07 04:49:55