2011-01-14 77 views
5

这里是例外:尝试打开Android XML视图时在Eclipse中引发NullPointerException?

java.lang.NullPointerException 
at android.widget.TextView.setTextColor(TextView.java:1787) 
at android.widget.TabHost$LabelIndicatorStrategy.createIndicatorView(TabHost.java:521) 
at android.widget.TabHost.addTab(TabHost.java:204) 
at com.android.layoutlib.bridge.Bridge.setupTabHost(Bridge.java:880) 
at com.android.layoutlib.bridge.Bridge.postInflateProcess(Bridge.java:807) 
at com.android.layoutlib.bridge.Bridge.postInflateProcess(Bridge.java:813) 
at com.android.layoutlib.bridge.Bridge.computeLayout(Bridge.java:401) 
at com.android.ide.eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart.computeLayout(Unknown Source) 
at com.android.ide.eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart.renderWithBridge(Unknown Source) 
at com.android.ide.eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart.recomputeLayout(Unknown Source) 
at com.android.ide.eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart.activated(Unknown Source) 
at com.android.ide.eclipse.adt.internal.editors.layout.LayoutEditor.pageChange(Unknown Source) 
at org.eclipse.ui.part.MultiPageEditorPart$2.widgetSelected(MultiPageEditorPart.java:290) 
at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:234) 
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) 
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258) 
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1282) 
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1267) 
at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1061) 
at org.eclipse.swt.custom.CTabFolder.setSelection(CTabFolder.java:2743) 
at org.eclipse.swt.custom.CTabFolder.onMouse(CTabFolder.java:1429) 
at org.eclipse.swt.custom.CTabFolder$1.handleEvent(CTabFolder.java:257) 
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) 
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258) 
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3540) 
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3161) 
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2640) 
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2604) 
at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438) 
at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671) 
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) 
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:664) 
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) 
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:115) 
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) 
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) 
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) 
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369) 
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:616) 
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:619) 
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:574) 
at org.eclipse.equinox.launcher.Main.run(Main.java:1407) 

这里是main.xml文件与相关联:

<?xml version="1.0" encoding="utf-8"?> 
<TabHost 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:id="@android:id/tabhost"> 

    <LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:padding="5dp"> 
    <TabWidget 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:id="@android:id/tabs" /> 
    <FrameLayout 
     android:id="@android:id/tabcontent" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"> 

     <include layout="@layout/basic_tab" /> 
     <include layout="@layout/advanced_tab" /> 

    </FrameLayout> 
    </LinearLayout> 
</TabHost> 

两个包含文件单独工作就好了。但是当在标签布局中时,会发生此错误。任何修复?
下面是代码:

import android.app.TabActivity; 
import android.content.res.Resources; 
import android.os.Bundle; 
import android.widget.TabHost; 

import com.mohit.geo2do.R; 

public class TaskEdit extends TabActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.edit_task); 

     Resources res = getResources(); 
     TabHost host = getTabHost(); 

     host.addTab(host.newTabSpec("basic") 
      .setIndicator("Basic", res.getDrawable(android.R.drawable.ic_menu_edit)) 
      .setContent(R.layout.basic_tab)); 
     host.addTab(host.newTabSpec("advanced") 
      .setIndicator("Advanced", res.getDrawable(android.R.drawable.ic_menu_manage)) 
      .setContent(R.layout.advanced_tab)); 

     host.setCurrentTab(0); 
    } 
} 

这里是XML文件,advanced_tab:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" 
    android:id="@+id/advanced_tab_layout"> 

    <TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
    android:text="Notify me:" 
    android:textColor="#FFFFFF" 
    android:textStyle="bold" 
    /> 

    <CheckBox 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:id="@+id/task_due" 
     android:text="when task is due" 
     android:textColor="#FFFFFF" 
     android:textStyle="bold" 
     android:paddingTop="5dip" 
    /> 

    <CheckBox 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:id="@+id/task_overdue" 
     android:text="when task is overdue" 
     android:textColor="#FFFFFF" 
     android:textStyle="bold" 
     android:paddingTop="5dip" 
    /> 

    <CheckBox 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:id="@+id/task_datetime" 
     android:text="at" 
     android:textColor="#FFFFFF" 
     android:textStyle="bold" 
     android:paddingTop="5dip" 
    /> 

    <TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
    android:text="Calendar:" 
    android:textColor="#FFFFFF" 
    android:textStyle="bold" 
    android:paddingTop="5dip" 
    /> 

    <CheckBox 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:id="@+id/task_calendar" 
     android:text="Create a calendar event" 
     android:textColor="#FFFFFF" 
     android:textStyle="bold" 
     android:paddingTop="5dip" 
    /> 

</LinearLayout> 

而且basic_tab.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical" 
android:id="@+id/basic_tab_layout"> 
<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
    android:text="Title:" 
    android:textColor="#FFFFFF" 
    android:textStyle="bold" 
    android:paddingTop="5dip" 
/> 

<EditText 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/title" 
    android:hint="Name of the task..." 
/> 

<TextView 
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content" 
    android:text="Importance:" 
    android:textColor="#FFFFFF" 
    android:textStyle="bold" 
    android:paddingTop="10dip" 
/> 

<RadioGroup 
    android:layout_height="wrap_content" 
    android:layout_width="fill_parent" 
    android:orientation="horizontal" 
    android:id="@+id/importance_grp"> 

    <RadioButton 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="High" 
     android:paddingRight="25dip" 
    /> 
    <RadioButton 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Medium" 
     android:checked="true" 
     android:paddingRight="25dip" 
    /> 
    <RadioButton 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Low" 
    /> 

</RadioGroup> 

<TextView 
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content" 
    android:text="Due Date:" 
    android:textColor="#FFFFFF" 
    android:textStyle="bold" 
    android:paddingTop="10dip" 
/> 

<Spinner 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/due_date" 
    android:prompt="@string/due_date_prompt" 
    android:entries="@array/due_date_entries" 
/> 

    <TextView 
     android:layout_height="wrap_content" 
     android:layout_width="wrap_content" 
     android:text="Notes:" 
     android:textColor="#FFFFFF" 
     android:textStyle="bold" 
     android:paddingTop="10dip" 
    /> 

    <EditText 
     android:layout_height="wrap_content" 
     android:layout_width="fill_parent" 
     android:id="@+id/notes" 
     android:hint="Notes..." 
     android:minLines="4" 
    /> 

</LinearLayout> 

UPDATE:

显然:

host.addTab(host.newTabSpec("advanced") 
     .setIndicator("Advanced", res.getDrawable(android.R.drawable.ic_menu_manage)) 
     .setContent(R.layout.advanced_tab)); 

不会将布局xml文件作为内容。它应该是:

host.addTab(host.newTabSpec("advanced") 
     .setIndicator("Advanced", res.getDrawable(android.R.drawable.ic_menu_manage)) 
     .setContent(R.id.advanced_tab_layout)); 

其中setContent需要一个ID。我仍然得到这个错误,但在模拟器上,这些选项卡实际上显示,但没有内容!

+1

请上传验证码。我没有在您的XML中看到任何TextView。也许你已经把它们放在'basic_tab'或'advanced_tab'文件中。发布完整的东西的人! – 2011-01-14 07:33:25

回答

1

那么,我刚刚清理了项目并删除了edit_task.xml文件并重新创建它。现在它工作正常。

5

您列出的异常是布局编辑器本身的错误。在运行Android布局代码时,我们没有正确初始化SDK版本,这意味着TabWidget中的某些版本条件代码将会运行(因为它实际上并未运行在它认为的版本中),因此运行会失败。我们在ADT 10(连同其他各种渲染/预览问题为标签。)解决这个

This是查找正确的版本传递给渲染器的变更)

相关问题