2012-03-16 5 views
0

누군가 내 문제를 해결할 수 있는지 묻습니다. 자바 클래스에 사용자 지정 대화 상자가 있습니다. 이 사용자 정의 대화 상자에는 버튼을 누르면 내 액티비티 클래스의 메서드가 호출됩니다. 내가 아무 일도 일어나지 않는 코드를 실행하면 메소드가 결코 호출되지 않고 에러가 발생하지 않는 것처럼 보입니다. 자바 클래스가 오버레이 아이템에 사용되고 있기 때문에 이런 방식으로 시도하는 이유가 있습니다. 아래는 내가 가지고있는 코드의 SNIPPIT이며, overlayitem자바 클래스에서 호출하는 작업 메서드

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에 반영되었는지 확인하십시오. –

+0

당신이 뭔가를 로깅하여 시작합니다. 정적이 아닌 메서드를 정적으로 호출한다고 생각하십시오. 마지막으로,보기에서 활동에 대한 참조가 무엇인지 확인하십시오 (컨텍스트가있을 수도 있습니다). – njzk2

+0

컴파일 할 수 있습니까? 정적 (클래스) 메서드를 호출하려고하지만 인스턴스 메서드 만 선언 된 것처럼 보입니다. – tidbeck

답변

0

당신은 캡슐화 문제가에 대한 문제

자바 클래스에 대한 통찰력을 가지고 사람에게 환호. .. 액티비티 클래스는 현재 스택의 맨 위에 있지 않으며 showMessage() 메서드는 정적이 아닙니다.

Java 오버레이 클래스가 아닌 Activity 클래스 내부에서 응용 프로그램 논리를 제어해야합니다 (MVVM 논리 즉, 활동이 사용자의 컨트롤러 인 MVC를 따르십시오). 가장 좋은 방법은 대화 상자/오버레이 객체를 액티비티에 캡슐화하고 액티비티 클래스 내에서 로직을 설정하는 것입니다 (이를 위해 오버레이 클래스에 적절한 메소드를 생성하는 것) 또는 액티비티의 오버레이와 내부 클래스를 만드는 것입니다. 이것은 당신이하려는 일에 당신이 허락 할 것입니다.

희망이 있습니다.

관련 문제