2013-04-04 34 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); 
相關問題