2011-03-23 6 views
4

Honeycomb의 이전 버전과의 호환성에 대해 질문이 있습니다. 2.1 이상을 지원하는 앱을 보유하고 있으며 TabActivity를 시작할 때를 제외하고 대부분 Honeycomb에서 작동하는 것으로 보입니다. 특히Honeycomb 및 TabHost 사양

, 나는 TabHost에 탭을 추가 할 때, 나는 다음과 같은 예외

android.content.res.Resources $ NotFoundException 수 : 자원 ID 번호 0x0을을

이 발생 코드를보고 예외적으로, 레이블과 아이콘이있는 탭 스펙이라는 것을 알 수 있습니다. 코드 내에서 LabelAndIconIndicatorStrategy는 레이아웃 파일 인 R.layout.tab_indicator를 팽창하려고 시도하는데, 사용 가능한 것으로 보이지 않습니다.

TabHost.TabSpec spec; // Resusable TabSpec for each tab 
    Intent intent; // Reusable Intent for each tab 

    // Create an Intent to launch an Activity for the tab (to be reused) 
    intent = new Intent().setClass(_gameActivity, ScoreGameActivity.class); 
    intent.putExtra(GameChangerConstants.STREAM_ID, _stream.pk().toString()); 

    // Initialize a TabSpec for each tab and add it to the TabHost 
    spec = _gameTabHost.newTabSpec("score_game").setIndicator("Score", res.getDrawable(R.drawable.icon_field_gloss)).setContent(intent); 
    _gameTabHost.addTab(spec); 

벌집에 대해 알지 못하는 탭을 만드는 새로운 방법이 있습니까? 나는 문서를 쏟아 부었지만 내가 한 것에 대한 문제를 나타내는 것을 보지 못했다.

우리는 UI 위젯을보다 포괄적 인 구조 조정을 할 수있을 때까지이 시점에서 조각을 사용하지 않아야하며이 문제를 더 잘 이해하고 싶습니다.

+0

예외 사항에 대해서는 logcat을 게시하십시오. 최근에 TabActivity와 관련된 v2.1과 그 사이의 문제를 처리해야했습니다. 그것은 같지는 않지만 보일만한 가치가 있습니다. – Squonk

+0

탭은 Honeycomb에서 잘 작동합니다. 이 샘플 프로젝트는 모두 XOOM에서 잘 작동합니다. https://github.com/commonsguy/cw-android/tree/master/Fancy/Tab https://github.com/commonsguy/cw-android/tree/master/Fancy/DynamicTab https://github.com/commonsguy/cw-android/tree/master/Activities/IntentTab – CommonsWare

+0

@MisterSquonk은 당신이 얼마나보고 싶어하는지 잘 모르겠으니 여기는 pastie [link] http :// /Castons.org/1704756[/link] – sparky

답변

14

은 내가 해결책을 발견했습니다 생각하지만, 사람들이 호기심 때문에, 여기에 내가이 문제에 실행했을 때 내가 가진 스택 트레이스입니다 :

05-17 13:09:53.462: ERROR/CustomExceptionHandler(500): Uncaught throwable in thread Thread[main,5,main] 
    android.content.res.Resources$NotFoundException: Resource ID #0x0 
    at android.content.res.Resources.getValue(Resources.java:1014) 
    at android.content.res.Resources.loadXmlResourceParser(Resources.java:2039) 
    at android.content.res.Resources.getLayout(Resources.java:853) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:389) 
    at android.widget.TabHost$LabelAndIconIndicatorStrategy.createIndicatorView(TabHost.java:568) 
    at android.widget.TabHost.addTab(TabHost.java:226) 
    at com.myApp.ui.TabDialog.addTab(TabDialog.java:80) 
    ... 

그 라인에서, 나는 코드가 거의 비슷 무엇 스파키 보았다 myTabHost는 TabHost하고 spec은을 TabSpec입니다

spec = myTabHost.newTabSpec("score_game").setIndicator("Score", res.getDrawable(R.drawable.icon_field_gloss)).setContent(intent); 
myTabHost.addTab(spec); 

하는 것으로.

이전에, 나는이 같은 myTabHost를 초기화되었습니다

TabHost myTabHost = new TabHost(getContext(), null); 

을 그리고 그것을 고정 :

//WRONG - This can CRASH your app starting at Android SDK 3.0 
TabHost myTabHost = new TabHost(getContext()); 

이 문제를 해결하려면, 나는이 일을하여 TabHost를 초기화 시작! 근본 원인을 찾고 싶지만 아직 이해할 수는 없습니다.

+0

감사합니다. 사실 앞서 모든 탭 호스트 초기화를 xml 레이아웃 리소스로 옮겼습니다.이 리소스는 문제를 해결 한 것으로 보이지만 해결 방법이 있다는 것을 알고 있습니다. – sparky

+0

@ plowman 감사합니다. 이 문제는 AttributeSet에 대해 null로 생성자를 호출하여 해결됩니다. 귀하의 질문에, 그 이유는 단일 param 생성자가 this (context, null, com.android.internal.R.attr.tabWidgetStyle)를 호출하지 않고 super (ctx)를 호출하기 때문에 많은 것들이 초기화되지 않는다는 것입니다 TabHost에 필요 – Sileria