2013-12-06 4 views
0

Я пытаюсь получить textview как android.r.id.title, чтобы показать имя моей вкладки.
Но он бросает NullPointerException на 2.2, но он отлично работает на >=4.x.Получение исключения NullPointer при использовании android.R.id.title

Вот мой код для справки.

for (int i = 0; i < mTabHost.getTabWidget().getChildCount(); i++) {  
      mTabHost.getTabWidget().getChildAt(i).getLayoutParams().height /= 2; 
      Log.i("TESTING WIDTH OF TABS ", "" 
        + mTabHost.getTabWidget().getChildAt(i).getWidth()); 
      View tabView = getTabWidget().getChildTabViewAt(i); 

      View v = (View) tabView.getParent(); 
      tv = (TextView) v.findViewById(android.R.id.title); 
      Typeface faceBold = Typeface.createFromAsset(getAssets(), 
        "fonts/eau_sans_bold.otf"); 
      tv.setTypeface(faceBold); 
      tv.setTextSize(12); 
      tv.setGravity(Gravity.CENTER); 
      tv.getLayoutParams().height = ViewGroup.LayoutParams.FILL_PARENT; 
      tv.getLayoutParams().width = ViewGroup.LayoutParams.WRAP_CONTENT; 

      tv.setGravity(Gravity.CENTER_VERTICAL); 
      mTabHost.getTabWidget().getChildAt(i) 
        .setBackgroundColor(Color.TRANSPARENT); 

И вот мой логарифм.

12-06 19:22:38.764: E/AndroidRuntime(603): FATAL EXCEPTION: main 
12-06 19:22:38.764: E/AndroidRuntime(603): java.lang.RuntimeException: Unable to start activity ComponentInfo{com./com..ProfileActivity}: java.lang.NullPointerException 
12-06 19:22:38.764: E/AndroidRuntime(603): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 
12-06 19:22:38.764: E/AndroidRuntime(603): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
12-06 19:22:38.764: E/AndroidRuntime(603): at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
12-06 19:22:38.764: E/AndroidRuntime(603): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
12-06 19:22:38.764: E/AndroidRuntime(603): at android.os.Handler.dispatchMessage(Handler.java:99) 
12-06 19:22:38.764: E/AndroidRuntime(603): at android.os.Looper.loop(Looper.java:123) 
12-06 19:22:38.764: E/AndroidRuntime(603): at android.app.ActivityThread.main(ActivityThread.java:4627) 
12-06 19:22:38.764: E/AndroidRuntime(603): at java.lang.reflect.Method.invokeNative(Native Method) 
12-06 19:22:38.764: E/AndroidRuntime(603): at java.lang.reflect.Method.invoke(Method.java:521) 
12-06 19:22:38.764: E/AndroidRuntime(603): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
12-06 19:22:38.764: E/AndroidRuntime(603): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
12-06 19:22:38.764: E/AndroidRuntime(603): at dalvik.system.NativeStart.main(Native Method) 
12-06 19:22:38.764: E/AndroidRuntime(603): Caused by: java.lang.NullPointerException 
12-06 19:22:38.764: E/AndroidRuntime(603): at com..ProfileActivity.onCreate(ProfileActivity.java:471) 
12-06 19:22:38.764: E/AndroidRuntime(603): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
12-06 19:22:38.764: E/AndroidRuntime(603): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 

Я не понимаю, почему я получаю это исключение.
Пожалуйста, дайте мне подсказку или ссылку.

+2

какая линия 471? (это немедленно сообщит вам, что является нулевым) – njzk2

+0

Отправьте свой код для onCreate() ... – Piyush

+0

@ njzk2 Typeface faceBold = Typeface.createFromAsset (getAssets(), "fonts/eau_sans_bold.otf"); –

ответ

0

Попробуйте изменить логику кода и используйте метод TabHost.TabSpec.setIndicator(View view), чтобы изменить имена вкладок. Вы можете инициировать программный код TextView (избегая findViewById) и задайте его как параметр этого метода. Таким образом, ваш код более безопасен для ошибок, чем тот, который вы описываете, поскольку вы не зависимы от изменений иерархии представлений в разных версиях Android.

Смежные вопросы