2014-10-17 2 views
0

대기중인 의도를 사용하여 위젯 버튼 클릭시 활동을 시작하는 방법을 알고 있지만 해당 활동의 특정 메소드를 시작하려고합니다.위젯 버튼을 클릭 할 때 다른 활동에 정의 된 '메소드'를 호출하는 방법은 무엇입니까?

+1

정적으로 만들거나 모델을 다시 디자인하십시오. – biegleux

+1

다른 메서드로 다른 메서드를 호출하는 대신 특정 메서드를 다른 클래스로 이동하십시오. –

+0

@biegleux, 재 설계 할 시간이 없다. 2 일 후에 제출해야한다. – ABcDexter

답변

6

다른 활동에서 메소드를 호출해야하는 경우 잘못된 디자인을 따르고 있습니다. 모든 코드를 활동에만 넣으면 안됩니다. 당신이 그것의 메소드를 호출하는 클래스의 객체가 필요하기 때문에
- 그것은 나쁜 선택의 이유

. 그리고 당신은 어떻게 활동의 대상을 얻을 것입니까? 한 활동의 ​​객체를 다른 활동으로 저장하지 않는다면 (그것은 매우 엉망입니다.) 이 접근법의 또 다른 문제점은 다른 활동이 이미 파괴되었을 수 있으므로 다른 활동의 UI 요소 중 일부를 사용하는 경우 전혀 도움이되지 않는다는 것입니다. 활동을 정적으로 만들면 커다란 웜 깡통이 생깁니다.

그래서 사용할 수있는 옵션 기능 -
은 선택의 여지가 간 활동 메서드 호출을 수행 할 수 있습니다,하지만 Singletons.They 정적으로 접근 할 것입니다 단지 하나 개의 객체를 가질 수 클래스가에 나는 의지 클래스 자체가 객체를 저장하기 때문에 아무 곳이나 클래스의 객체를 저장할 필요가 없습니다. 그것은 다음과 같이 갈 수 있습니다 -

public class AppManager{ 
    private static AppManager _instance = null; 
    public static AppManager getInstance(){ 
    if(_instance == null) 
     _instance= new AppManager(); 
    return _instance; 
    } 
    private AppManager(){} //Making the constructor private, so no 2 object can be created 
    public void someMethod(){} 
} 

그래서 프로젝트의 모든 곳에서 someMethod()를 호출하기 위해 당신이

AppManager.getInstance().someMethod(); 

그래서 거기에 모든 계산을 호출 할 필요가 단지 것이다. 현재 액티비티 객체를 Manager 클래스에 저장하거나 액티비티를 완전히 추상화하여 코드를보다 잘 제어 할 수 있습니다. 물론 네 개의 싱글 톤 클래스를 가질 수 있습니다. 나는 일반적으로 내 프로젝트에 다른 작업을 처리하는 거의 6-7 명의 Singleton 관리자가 있습니다.

3

두 개의 다른 활동에서 동일한 방법을 사용해야합니다. 그래서, 그 방법으로 다른 클래스를 얻은 다음 두 방법 모두에서 해당 메소드를 호출하는 것이 가장 좋습니다.

public class A extends Activity 
{ 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main2); 

    }  

    B.method() 
} 

public class B { 

    public static void method() 
    { 

    } 

} 

public class C extends Activity 
{ 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main2); 

     B.method(); 

    } 
} 
+0

자, 확인하고 알려 드리겠습니다. 감사. – ABcDexter