2013-06-24 75 views
0

在我的應用程序中,我將一個相同的線性佈局添加到已經在屏幕上的線性佈局。這裏是我嘗試將其添加到代碼:膨脹XML上的Forceclose

LinearLayout addItem=(LinearLayout)findViewById(R.id.lladdItem); 
       insideScroll.addView(addItem); 

我得到了logcat的錯誤這是張貼在這裏:

06-24 14:58:16.873 13304-13304/com.frostbytedev.randomgenie E/AndroidRuntime: FATAL EXCEPTION: main 
     java.lang.NullPointerException 
     at android.view.ViewGroup.addView(ViewGroup.java:3148) 
     at android.view.ViewGroup.addView(ViewGroup.java:3131) 
     at com.frostbytedev.randomgenie.Test.onClick(Test.java:49) 
     at android.view.View.performClick(View.java:4204) 
     at android.view.View$PerformClick.run(View.java:17355) 
     at android.os.Handler.handleCallback(Handler.java:725) 
     at android.os.Handler.dispatchMessage(Handler.java:92) 
     at android.os.Looper.loop(Looper.java:137) 
     at android.app.ActivityThread.main(ActivityThread.java:5041) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:511) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
     at dalvik.system.NativeStart.main(Native Method) 

,這是充氣的XML:

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:id="@+id/lladdItem" 
       android:paddingLeft="15dp" 
       android:weightSum="100" 
       android:layout_width="fill_parent" 
       android:layout_height="80dp" 
       android:orientation="horizontal"> 
    <TextView 
      android:layout_weight="10" 
      android:layout_width="10dp" 
      android:layout_height="80dp" 
      android:text="2." 
      android:id="@+id/tvItem2"/> 
    <EditText 
      android:layout_weight="90" 
      android:layout_width="100dp" 
      android:layout_height="80dp" 
      android:hint="List Item 2" 
      android:id="@+id/etItem2" 
      android:paddingTop="50dp"/> 

</LinearLayout> 

XML在哪裏被充氣到:

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:orientation="vertical" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent"> 

    <ScrollView 
      android:layout_width="fill_parent" 
      android:layout_height="465dp" 
      android:id="@+id/svItems" 
      android:layout_gravity="center" 
      > 
     <LinearLayout 
       android:layout_width="match_parent" 
       android:layout_height="400dp" 
       android:orientation="vertical" 
       android:id="@+id/insideScroll"> 

      <LinearLayout 
        android:paddingLeft="15dp" 
        android:weightSum="100" 
        android:layout_width="fill_parent" 
        android:layout_height="80dp" 
        android:orientation="horizontal"> 
       <TextView 
         android:layout_weight="10" 
         android:layout_width="10dp" 
         android:layout_height="80dp" 
         android:text="1." 
         android:id="@+id/tvItem1"/> 
       <EditText 
         android:layout_weight="90" 
         android:layout_width="100dp" 
         android:layout_height="80dp" 
         android:hint="List Item 1" 
         android:id="@+id/etItem1" 
         android:paddingTop="50dp"/> 

      </LinearLayout> 
      <LinearLayout 
        android:paddingLeft="15dp" 
        android:weightSum="100" 
        android:layout_width="fill_parent" 
        android:layout_height="80dp" 
        android:orientation="horizontal"> 
       <TextView 
         android:layout_weight="10" 
         android:layout_width="10dp" 
         android:layout_height="80dp" 
         android:text="2." 
         android:id="@+id/tvItem2"/> 
       <EditText 
         android:layout_weight="90" 
         android:layout_width="100dp" 
         android:layout_height="80dp" 
         android:hint="List Item 2" 
         android:id="@+id/etItem2" 
         android:paddingTop="50dp"/> 

      </LinearLayout> 
     </LinearLayout> 
    </ScrollView> 
<LinearLayout 
     android:layout_height="50dp" 
     android:layout_width="fill_parent" 
     android:orientation="horizontal" 
     android:weightSum="100"> 
    <Button 
      android:layout_weight="50" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Add" 
      android:id="@+id/bAdd"/> 

    <Button 
      android:layout_weight="50" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Remove" 
      android:id="@+id/bRemove" 
      android:layout_gravity="center"/> 
    </LinearLayout> 
</LinearLayout> 

的Java:

package com.frostbytedev.randomgenie; 

import android.app.Activity; 
import android.content.Context; 
import android.os.Bundle; 
import android.util.DisplayMetrics; 
import android.view.View; 
import android.widget.*; 

import java.util.ArrayList; 
import java.util.List; 

/** 
* Created by Steven on 6/23/13. 
*/ 
public class Test extends Activity implements View.OnClickListener{ 
    java.util.List<TextView> listOfET = new ArrayList<TextView>(); 
    LinearLayout insideScroll; 
    ScrollView svItems; 
    TextView etItem1, etItem2; 
    Button Add, Remove; 
    int numOfItems = 2, width, height; 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.dynamictest); 
     initialize(); 
    } 

    private void initialize() { 
     Add=(Button)findViewById(R.id.bAdd); 
     Remove=(Button)findViewById(R.id.bRemove); 
     insideScroll=(LinearLayout)findViewById(R.id.insideScroll); 
     etItem1=(TextView)findViewById(R.id.etItem1); 
     etItem2=(TextView)findViewById(R.id.etItem2); 
     svItems=(ScrollView)findViewById(R.id.svItems); 
     Add.setOnClickListener(this); 
     Remove.setOnClickListener(this); 

     listOfET.add(etItem1); 
     listOfET.add(etItem2); 
    } 

    @Override 
    public void onClick(View view) { 
     switch(view.getId()){ 
      case R.id.bAdd: 
       numOfItems += 1; 
       LinearLayout addItem=(LinearLayout)findViewById(R.id.lladdItem); 
       insideScroll.addView(addItem); 

       break; 
      case R.id. bRemove: 

       listOfET.remove(numOfItems); 
       numOfItems -= 1; 
       break; 

     } 
    } 

    private int getDP(float i) { 
     DisplayMetrics metrics = getResources().getDisplayMetrics(); 
     float dp = i; 
     float fpixels = metrics.density * dp; 
     int pixels = (int) (fpixels + 0.5f); 
     return pixels; 
    } 

} 
+0

你'NullPointerException'來自'Test'類中,'onClick'方法。檢查Test.java,第49行,在那裏有一個'null'對象。 – Voicu

+0

哪一行是'Test'的49?如果它是'insideScroll.addView(addItem);'然後顯示你已經初始化'insideScroll' – codeMagic

+0

這是第49行,這是我如何定義它:LinearLayout insideScroll =(LinearLayout)findViewById(R.id.insideScroll); –

回答

0

糾正我,如果我錯了,有很多通過看,但它看起來像您要添加的項目是比你setContentView()膨脹的一個不同的XML文件我看不出你是充氣Layout所以你需要做的,或者LinearLayoutnull

現在,不能在NPEinsideScroll.addView(addItem);,從我可以看到它是正確初始化創建。我會嘗試清理你的項目,以防編輯器沒有修改你的xml。

Window --> Project --> Clean... 

,並選擇您的項目

+0

清理它並得到相同的錯誤。 –

+0

通過設置斷點來檢查'insideScroll'確實是否爲'null' – codeMagic

2

由於你的代碼(Test.java:49)是一對夫婦的召喚從NPE的網站堆棧的,很明顯,insideScrollnull那裏。這就讓addItem成爲可能的罪魁禍首。而我讀XML的方式,findViewById(R.id.lladdItem)返回null,因爲lladdItem沒有在定義您的內容視圖(dynamictest.xml)的XML文件中定義。

我相信你需要做的是吹lladditem,而不是尋找它它不存在:

  LayoutInflater inflater = LayoutInflater.from(view.getContext()); 
      LinearLayout addItem = 
       (LinearLayout) inflater.inflate(R.layout.lladditem, null); 
      insideScroll.addView(addItem);