2012-03-06 77 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