2011-06-10 8 views
1

라이브러리에 메뉴가있는 활동이 있습니다. 이 메뉴에는 모든 표준 속성뿐만 아니라 onCreateOptionsMenu 및 onOptionsItemSelected의 @Override가 있습니다.재정의 재정의?

위의 라이브러리를 가져 오는 실제 프로젝트에서 나는 활동을 확장하는 다른 활동이 있습니다. 이 프로그램의 특정 구현을 위해이 액티비티에 다른 메뉴를 갖고 싶기 때문에이 액티비티 코드베이스 안에 적절한 @Override를 추가하여 onCreateOptionsMenu와 onOptionsItemSelected를 추가 할 수 있습니다. 그러나 라이브러리의 메뉴가 라이브러리의 오버라이드가 아니라 라이브러리에서 가져옵니다.

내가 잘못 할 수 있습니까?

기본 클래스 :

public class ListItems extends ListActivity { 
    public static final int LOGOUT = 0; 
    public static final int HISTORY = 1; 
    public static final int REFRESH = 2; 


@Override 
public boolean onCreateOptionsMenu(Menu menu){ 
    menu.add(0, LOGOUT ,0,"Log Out"); 
    menu.add(0,HISTORY,0,"Order History"); 
    menu.add(0,REFRESH,0,"SMS"); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected (MenuItem item){ 
    TextView textView = (TextView)findViewById(com.imobileminutes.library.R.id.text); 
    switch (item.getItemId()){ 
     case LOGOUT: 
      Intent logOut = new Intent(ListItems.this,MainScreen.class); 
      startActivity(logOut); 
      finish(); 
      return true; 
     case HISTORY: 
      Intent orderHistory = new Intent(this,OrderItems.class); 
      startActivity(orderHistory); 
      return true; 
     case REFRESH: 
      Intent orderHistory = new Intent(this,OrderItems.class); 
      startActivity(orderHistory); 
      return true; 
} 
    return false; 
} 
} 

재정의 클래스

public class ListItems extends com.imobileminutes.library.ListItems { 
    static final int SMS = 2; 


@Override 
public boolean onCreateOptionsMenu(Menu menu){ 
    Log.d("onCreateOptionsMenu", "My onCreateOptionsMenu ran"); 
    Toast.makeText(getApplicationContext(), "HEllo Menu Created", Toast.LENGTH_LONG).show(); 
    super.onCreateOptionsMenu(menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected (MenuItem item){ 
    Log.d("onCreateOptionsMenu", "My onOptionsItemSelected ran"); 
    Toast.makeText(getApplicationContext(), "HElloonOptionsItemSelected", Toast.LENGTH_LONG).show(); 

    super.onOptionsItemSelected(item); 
    return false; 
} 

} 그것은 내 라이브러리 ListItems.this와의 createAccount를 호출하는 것을 었죠

결론 이것은 확장 된 수업이 아닌 도서관에서의 활동을 언급하고있었습니다.

모든 확장 활동 유형에 대해 의도를 추가하고이를 호출하여 기본 활동보다는 확장 된 활동을 불러옵니다.

도움 주셔서 감사합니다.

+3

코드를 표시하지 않으면 어떻게 알 수 있습니까? –

+0

더 많은 코드와 코드를 호출해야합니다. – Woot4Moo

+0

메뉴, 메뉴 버튼을 누르겠습니다 –

답변

0

가져 오기에서 정규화 된 이름을 사용하십시오. 잘못된 클래스를 참조하고 있습니다.

+0

빈 괄호 만 남겨두고 오버라이드 된 클래스의 모든 것을 꺼내면 기본 클래스별로 잘 작동하므로 참조가 정상적으로 작동합니다. –

1

중 하나를 복사하여 정확하게 코드를 붙여 넣습니다, 또는 문제의 일부는 파생 클래스로 onCreateOptionsMenu에 대해 동일한 정의를 제공하여 기본 클래스에하지 않았다 : 마지막으로 그

@Override 
public boolean onCreateOptionsMenu(Menu menu){ 
    menu.add(0, LOGOUT ,0,"Log Out"); 
    menu.add(0,HISTORY,0,"Order History"); 
    menu.add(0,REFRESH,0,"SMS"); 
    return true; 
} 

라인이 맞을 수 없다 - 나는 기본 클래스 구현의 마지막 라인이 다음과 같아야한다고 확신한다 : menu.add(0,REFRESH,0,"REFRESH");.

그러나 onCreateOptionsMenu의 마지막 줄은 또한 파생 클래스에서 변경해야합니다 :

@Override 
public boolean onCreateOptionsMenu(Menu menu){ 
    menu.add(0, LOGOUT ,0,"Log Out"); 
    menu.add(0, HISTORY,0,"Order History"); 
    menu.add(0, SMS,0,"SMS"); // Use the correct constant (SMS instead of REFRESH) 
    return true; 
} 

편집 : 또한, 당신은 코드를 조금 단순화 할 수 있습니다, 사람들을위한 슈퍼 클래스 구현을 다시 사용하여 현재 단지 슈퍼 클래스 코드 (로그 아웃과 역사를) 복사하는 선택 :

@Override 
public boolean onOptionsItemSelected (MenuItem item){ 
    TextView textView = (TextView)findViewById(com.imobileminutes.library.R.id.text); 
    // Left this as a 'switch'; you might want to use an 'if' instead. 
    switch (item.getItemId()){ 
    case SMS: 
     AppClass.sendSMS("8135551212", "Hello Jason"); 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 
+0

예이 예제에서는 올바르게 복사하지 않았습니다. –

+0

@Jason Carter : 글쎄, 당신은 여전히 ​​onCreateOptionsMenu'의 기본 클래스 정의에서 전사 오류처럼 보입니다 - 마지막 줄을보십시오 . –

+0

@ Jason Carter : 'onOptionsItemSelected'에서 스위치의 마지막 두 경우는 동일하게 구현됩니다. 지금까지 발견 한 것처럼 코드를 다시 입력하는 것보다 복사 및 붙여 넣기를 직접 수행하는 것이 좋습니다. 코드를보다 정확하게 제공할수록 더 정확한 답변을 얻을 수 있습니다. –

0

은 내가 Activitys를 호출 한 방법이었다 밝혀졌습니다. 재정의 된 라이브러리를 라이브러리에서 직접 호출하는 대신 라이브러리에서 직접 호출하려고했습니다. overriden 것들은 Apps 명명법에 따라 동적이기 때문에 호출자 packagename을 검색하고 특정 의도를 추가하는 Intents를 사용하여 끝내게됩니다.

모든 것을 설정하면 바로 SMS 메뉴 항목이 나타납니다.