2013-07-24 10 views
0

com.android.internal.app 부분 인 ActionBarImpl을 확장해야합니다. 그러나 새로운 안드로이드 릴리스에서 언제든지 바뀔 것이기 때문에 그렇게하는 것을 권장하지 않습니다. 즉com.android.internal.app를 속여 ActionBarImpl을 확장하십시오.

public class MyActionBar extends ActionBar { 
    private ActionBar ab; 

    public MyActionBar(Activity activity) { 
     ab = activity.getActionBar(); 
    } 

    @Override 
    public void setCustomView(View view) { 
     ab.setCustomView(view); 

    } 

    ... (so on with all ActionBar abstract methods) 

: 나는 내가 이런 식으로 클래스를 생성하여 "속임수"할 생각 ActionBarImpl을 다시 구현하려고하지 않기 때문에
나는 실제 어디서 ActionBar + 개인 회원이 확장 activity's ActionBar 그리고 모든 메소드 호출을 위임하십시오.

이렇게하면 단점이 있습니까? 호환성을 깨뜨리지 않을거야?

답변

0

당신이 할 일은 장식 패턴을 적용하는 것입니다. 그러나 액티비티는 장식 된 것이 아닌 ActionBar의 원래 인스턴스를 계속 사용하기 때문에 원하는대로 작동하지 않는 것으로 보입니다.

+0

그러나 ActionBarImpl 호출 전후에 코드를 추가하여 ActionBar 메서드를 조정할 수 있습니다. 내 앱에서'ActionBar actionBar = getActionBar()'코드를'ActionBar actionBar = new MyActionBar (this)'로 바꾸고 평소와 같이 계속 사용합니다. – ilomambo

+0

원본 ActionBar 메서드를 장식하는 경우 원래 논리를 직접 래핑하는 것이 좋습니다. 하지만 시스템과 활동 자체는 여전히 원래 인스턴스를 사용할 것이라고 고려할 수 있습니다. ActionBar가 화면에 자신을 그리는 redraw() 메소드를 가지고있는 것처럼 가정 해 봅시다.이 메서드를 래핑할지 여부는 시스템이 원래의 방법을 사용할지 여부에 따라 달라 지므로 변경 내용이 ActionBar의 그리는 방법에 영향을 미치지 않습니다. – Antonio