2013-04-04 132 views
-2

我有名为sample.xml中如下的自定义布局,如何设置自定义布局主视图中的setContentView在android系统

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

<TableLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" > 

    <TextView 
     android:id="@+id/textView3" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="10dp" 
     android:text="@string/Constituency" /> 

    <View 
     android:layout_width="wrap_content" 
     android:layout_height="2dip" 
     android:layout_marginLeft="20dp" 
     android:layout_marginRight="33dp" 
     android:layout_marginTop="10dp" 
     android:background="#000000" /> 

    <TableRow 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginBottom="0dp" 
     android:layout_marginLeft="20dp" 
     android:layout_marginTop="0dp" > 

     <View 
      android:layout_width="3dp" 
      android:layout_height="40dp" 
      android:background="#000000" /> 

     <TextView 
      android:id="@+id/TextView04" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginLeft="10dp" 
      android:layout_marginTop="0dp" 
      android:text="@string/Nampally" />   
    </TableRow> 
    </TableLayout> 
</LinearLayout> 

在MainActivity中,的setContentView设置为

setContentView(R.Layout.activity_main) 

这是默认的xml文件。现在我想在应用程序启动时将内容视图设置为sample.xml。

我已经给出

setContentView(R.Layout.sample); 

,当我跑我的应用程序,它说,遗憾的是应用程序失败!错误。

当我调试,它表现出一定的空指针异常

这是我的logcat,

04-04 03:55:40.691: D/AndroidRuntime(2174): Shutting down VM 
04-04 03:55:40.691: W/dalvikvm(2174): threadid=1: thread exiting with uncaught exception (group=0x40a71930) 
04-04 03:55:40.711: E/AndroidRuntime(2174): FATAL EXCEPTION: main 
04-04 03:55:40.711: E/AndroidRuntime(2174): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.liveapp/com.example.liveapp.MainActivity}: java.lang.NullPointerException 
04-04 03:55:40.711: E/AndroidRuntime(2174):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 
04-04 03:55:40.711: E/AndroidRuntime(2174):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
04-04 03:55:40.711: E/AndroidRuntime(2174):  at android.app.ActivityThread.access$600(ActivityThread.java:141) 
04-04 03:55:40.711: E/AndroidRuntime(2174):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
04-04 03:55:40.711: E/AndroidRuntime(2174):  at android.os.Handler.dispatchMessage(Handler.java:99) 
04-04 03:55:40.711: E/AndroidRuntime(2174):  at android.os.Looper.loop(Looper.java:137) 
04-04 03:55:40.711: E/AndroidRuntime(2174):  at android.app.ActivityThread.main(ActivityThread.java:5041) 
04-04 03:55:40.711: E/AndroidRuntime(2174):  at java.lang.reflect.Method.invokeNative(Native Method) 
04-04 03:55:40.711: E/AndroidRuntime(2174):  at java.lang.reflect.Method.invoke(Method.java:511) 
04-04 03:55:40.711: E/AndroidRuntime(2174):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
04-04 03:55:40.711: E/AndroidRuntime(2174):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
04-04 03:55:40.711: E/AndroidRuntime(2174):  at dalvik.system.NativeStart.main(Native Method) 
04-04 03:55:40.711: E/AndroidRuntime(2174): Caused by: java.lang.NullPointerException 
04-04 03:55:40.711: E/AndroidRuntime(2174):  at com.example.liveapp.MainActivity.onCreate(MainActivity.java:49) 
04-04 03:55:40.711: E/AndroidRuntime(2174):  at android.app.Activity.performCreate(Activity.java:5104) 
04-04 03:55:40.711: E/AndroidRuntime(2174):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
04-04 03:55:40.711: E/AndroidRuntime(2174):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 
04-04 03:55:40.711: E/AndroidRuntime(2174):  ... 11 more 

,这我MainActivity.java,

public class MainActivity extends Activity { 
    public final android.content.Context Context = MainActivity.this; 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
     final LinearLayout samplelayout=(LinearLayout)findViewById(R.layout.sample); 
    setContentView(R.layout.samplelayout); 
    } 
} 

什么错我的代码?

请帮忙!!

+0

你可以发布代码(java代码)吗?日志? – 2013-04-04 03:53:31

+0

Theres没有问题,你的xml,它适用于我。发布您的代码 – 2013-04-04 03:57:51

+0

发布Logcat和我的代码。 – Mahe 2013-04-04 04:04:31

回答

0

如果在从一个布局文件切换到另一个布局文件时发生NullPointerException,那么很可能是您正在访问对具有findViewById的View对象的引用,该布局不存在于新布局中。 findViewById返回一个空对象,所以当你调用一个方法或访问该对象的公共属性时,你会得到NPE。

此外,sampleLayout变量是多余的。

final LinearLayout samplelayout=(LinearLayout)findViewById(R.layout.sample); 
setContentView(R.layout.samplelayout); 

应该简单地

setContentView(R.layout.sample); 
1

我不知道这是否是原因的NPE,但它肯定是不对的。在你的线上

final LinearLayout samplelayout =(LinearLayout)findViewById(R.layout.sample);

您试图获得对LinearLayout的引用作为视图,但是您将它传递给文件的id。其中findViewById()适用于视图ID,而不是布局ID。删除这一行。

你只需要有。

setContentView(R.layout.samplelayout);

0

您正在创建之前尝试获取对LinearLayout的引用。您必须首先设置内容视图,然后尝试通过ID查找视图。另一个问题,因为该ID是错误的。试试这个:


setContentView(R.layout.samplelayout); 
final LinearLayout samplelayout=(LinearLayout)findViewById(R.layout.your_layout_id); 
相关问题