2011-04-11 1 views
0

TabHost은 두 개로 구성되어야합니다. tabstab은 별개로 Activity으로 표시됩니다. 각 Activity에는 자체 데이터 필드와이를 조작하는 메소드가 있습니다. 각 tabmenu을 갖고 싶습니다.이 경우 menuclass의 메소드를 호출 할 수있게하려면 onOptionsItemSelected() 메소드가 class의 일부가되어야합니다.TabHost : 각각 별도의 탭/액티비티에서 onOptionsItemSelected를 처리해야하는 경우

어떻게 구현하면 좋을까요?

menuTabHost을 나타내는 클래스에서 시작되었지만 문제가 발생하여 내 Activities의 메소드에 액세스 할 수 없습니다. 나는 Activitiesstatic의 방법을 그들에게 접근 할 수있게하기로 결정했지만, 결국 나는이 모든 것의 거의 모든 필드를 정적으로 정의 할 필요가있다. 그것은 나를위한 좋은 해결책이 아닌 것처럼 보인다.

업데이트 :


그것은 훨씬 더 쉽게되었다가 나는 생각했다. onOptionsItemSelected()에서 tab의 현재 Activity을 가져올 수 있습니다.

SecondActivity sa = (SecondActivity)this.getCurrentActivity() 
sa.myPublicMethod(); 
+0

그렇다면 자신의 인터페이스를 구현 했습니까? 또는 정적 메서드를 사용 했습니까? 또는 둘 다? 나는 왜 당신이 옳은 대답으로 야고보의 대답을 받아들 였는지 이해하지 못합니다. – techiServices

답변

0

이것은 실제로 어떤 종류의 기능을 구현하는지에 따라 다릅니다. 각 액티비티에 필요한 인스턴스 메소드로 인터페이스를 구현 한 다음 tabhost에 인터페이스 유형의 현재 활동에 대한 참조가 포함되게 할 수 있습니다. 이렇게하는 경우 다른 활동으로 전환 할 때마다 참조를 업데이트하십시오.

+0

이 방법을 사용하면 메모리 누수가 발생할 수 있습니다. http://stackoverflow.com/questions/5623197/how-to-keep-always-up-to-date-reference-to-activity – Eugene

+0

활동 변경 사항 전체에서 참조를 유지하려고하면 메모리 누수가 발생합니다. 스택. 변경 사항을 스택에 푸시하기 전에 참조를 업데이트해야합니다. – James

+1

가장 좋은 방법은 참조를 자신의 'Application' 클래스에 보관하고 getApplicationContext()에서'MyApplication'을 사용하여 참조에 액세스 할 수있게하는 것입니다. – techiServices

0

ActivityonOptionItemSelected()을 사용하고 호출하는 Activity을 전달하는 정적 메서드를 호출하십시오. Activityclass을 확인한 다음 ActivityTabOneActivity 또는 TabTwoActvity으로 전송할 수 있습니다. 필요한 메소드가 공용 (또는 동일한 패키지에있는 경우 친숙)하면 정적 일 필요없이 액세스 할 수 있습니다.

편집 :

onOptionItemSelected()에서 호출하기 때문에 정적 메소드와 같은 클래스를 만듭니다.

class GlobalStaticMethods { 
    // Pass in the following as a which (avoids having to check class using SimpleClassName) 
    public static final int TabActivityOne = 1; 
    public static final int TabActivityTwo = 2; 

    public static myOnOptionItemSelected(final Activity activity, final int which) { 

     switch (which) { 
      case TabActivityOne: 

       ((TabActivityOne)activity).tabActivityOneMethod(); 

       break; 
      case TabActivityTwo: 

       ((TabActivityTwo)activity).tabActivityTwoMethod(); 

       break; 
     } 
    } 
} 
+0

죄송합니다, "MAIN 활동에서 onOptionItemSelected를 사용 하시겠습니까?" – Eugene

+0

내 대답을 편집했습니다. 잘만되면 내가 얻는 것이 더 의미가 있습니다. 필요에 따라 다른 변수를 전달할 수도 있습니다. Main, TabOne, TabTwo ... 등 응용 프로그램의 모든 Activity에서이 메서드를 사용할 수 있습니다. – techiServices

+0

고마워, 내 설명에 대한 업데이트를 참조하십시오 - 해결책은 훨씬 간단합니다 :) – Eugene

관련 문제