Android : 재정의 메소드를 다시 작성하지 않고 각 (목록) 활동에서 공유 메뉴를 공유하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/2006457

문제

Android는 메뉴를 정의하기 위해 재정의 할 유용한 방법을 제공한다는 것을 알고 있습니다.

    @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  menu.add(0, AIS, 0, "Activity Inventory Sheet").setIcon(android.R.drawable.ic_menu_upload);
                // ...
  return true;
 }

 public boolean onOptionsItemSelected(MenuItem item) {
  Intent i;
     switch (item.getItemId()) {
     case AIS: i = new Intent(this, ActivityInventorySheet.class);
      startActivity(i);
               return true;
     // ...
     }
     return false;
 }

이 메뉴를 Android 응용 프로그램의 각 활동과 ListActivity에서 공유하고 싶습니다. 이는 각 (목록) 활동에 표준 메뉴가있어 사용자가 클릭 안에 응용 프로그램의 모든 부분으로 점프 할 수 있습니다.

현재이를 달성하는 가장 쉬운 방법은 응용 프로그램의 모든 (목록) 활동에서 두 가지 방법을 복사하고 붙여 넣는 것입니다. 나는이 중복 된 코드를 작성하는 것을 좋아하지 않는다 :)

하위 클래스가 합리적인 선택입니까? 나는 이미 내 ListActivity 중 하나를 서브 클래스하는 것이 잘 작동하지 않는다는 것을 이미 보았습니다 (데이터베이스에서 객체를 검색하는 스레드는 문제가 발생합니다). 활동을 통해 메뉴를 공유 할 수있는 다른 방법이 있습니까?

감사

도움이 되었습니까?

해결책

이것이 완벽하게 작동하지 않을 이유가 없습니다.

public abstract class MyListActivity extends ListActivity
{
   @Override
   public boolean onCreateOptionsMenu(Menu menu) {
      menu.add(0, AIS, 0, "Activity Inventory Sheet").setIcon(android.R.drawable.ic_menu_upload);
      // ...
      return true;
   }

   @Override
   public boolean onOptionsItemSelected(MenuItem item) {
      Intent i;
      switch (item.getItemId()) {
          case AIS: i = new Intent(this, ActivityInventorySheet.class);
          startActivity(i);
          return true;
          // ...
      }
      return false;
   }    
}

그런 다음 활동이 ListActivity 대신 mylistactivity를 확장하도록하십시오.

나는 이미 내 ListActivity 중 하나를 서브 클래스하는 것이 잘 작동하지 않는다는 것을 이미 보았습니다 (데이터베이스에서 객체를 검색하는 스레드는 문제가 발생합니다).

이것은 완전히 다른 문제처럼 들립니다. 이것에 관한 별도의 질문을 게시하고 싶을 수도 있습니다. Java에서 클래스를 연장하는 것만으로도 설명하는 것과 같은 문제가 발생하지 않아도됩니다.

다른 팁

정적 메소드가있는 헬퍼 클래스를 사용하여 공통 메뉴 옵션을 초기화하고 처리 한 다음 각 활동이 자체적으로 정의됩니다. onCreateOptionsMenu 등.

같은 것

class SharedMenu {
    public static void onCreateOptionsMenu(Menu menu) {
        menu.add(...);
        menu.add(...);
    }
}

public class MyActivity extends Activity {

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);
        menu.add(...);  // specific to this activity
        SharedMenu.onCreateOptionsMenu(menu);
        return true;
    }

}

더 많은 방법으로 onMenuItemSelected 등.

편집 : 나는 공통 기본 클래스를 사용하고 있지 않기 때문에 두 개의 기본 클래스가 필요하기 때문에, 하나는 활동을 위해, 다른 하나는 목록 활동을 위해 다른 하나를 시작한 다음, 내 경우에는 일부 활동에 사용자 정의 메뉴 옵션을 추가해야합니다.

방금 기능을 추가했습니다 Greendroid 그것을 관리합니다. 매우 유용 할 수 있습니다. 확인하십시오. 나중에 예제를 게시하려고합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top