1

像这样一个愚蠢的错误让我疯狂,只想为每个视图绘制两种颜色的布局的背景,但我得到一个nullPointerException。NullPointerException当绘制背景RelativeLayout

XML文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 
    <RelativeLayout 
     android:id="@+id/background_areas" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical"> 
.... 

的Java文件:

for (int o = 0; o < areas.size(); o++) { 
     LayoutInflater li_area= (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     final View vArea = li_area.inflate(R.layout.areas_detalles_cpa, null); 
     RelativeLayout fondo_area = (RelativeLayout)findViewById(R.id.background_areas); 
     if(o%2==0){ 

NullPointerException异常fondo_area.setBackgroundColor(Color.rgb(104, 2, 64));

  }else{ 
       fondo_area.setBackgroundColor(Color.rgb(197, 5, 120)); 
     } 
...... 

的logcat:

01-31 14:11:47.956: W/System.err(12950): java.lang.NullPointerException 
01-31 14:11:47.964: W/System.err(12950): at com.hiberus.campus.cpa.views.AreasEstudiosCPA.cargarListaAreas(AreasEstudiosCPA.java:125) 
01-31 14:11:47.964: W/System.err(12950): at com.hiberus.campus.cpa.views.AreasEstudiosCPA$task.onPostExecute(AreasEstudiosCPA.java:200) 
01-31 14:11:47.964: W/System.err(12950): at com.hiberus.campus.cpa.views.AreasEstudiosCPA$task.onPostExecute(AreasEstudiosCPA.java:1) 
01-31 14:11:47.964: W/System.err(12950): at android.os.AsyncTask.finish(AsyncTask.java:602) 
01-31 14:11:47.964: W/System.err(12950): at android.os.AsyncTask.access$600(AsyncTask.java:156) 
01-31 14:11:47.964: W/System.err(12950): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:615) 
01-31 14:11:47.964: W/System.err(12950): at android.os.Handler.dispatchMessage(Handler.java:99) 
01-31 14:11:47.964: W/System.err(12950): at android.os.Looper.loop(Looper.java:137) 
01-31 14:11:47.964: W/System.err(12950): at android.app.ActivityThread.main(ActivityThread.java:4514) 
01-31 14:11:47.964: W/System.err(12950): at java.lang.reflect.Method.invokeNative(Native Method) 
01-31 14:11:47.964: W/System.err(12950): at java.lang.reflect.Method.invoke(Method.java:511) 
01-31 14:11:47.964: W/System.err(12950): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790) 
01-31 14:11:47.964: W/System.err(12950): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557) 
01-31 14:11:47.964: W/System.err(12950): at dalvik.system.NativeStart.main(Native Method) 

我检查过id,xml文件的名称和一切似乎都很好,发生了什么?

+0

显示你的logcat –

+0

我编辑我的问题,显示logcat – jlopez

+0

把你的完整的程序代码的朋友... –

回答

4

我认为你缺少这部分.. 使用vArea.findViewById(),而不是只findViewById()

final View vArea = li_area.inflate(R.layout.areas_detalles_cpa, null); 
     RelativeLayout fondo_area = (RelativeLayout)vArea.findViewById(R.id.background_areas); 
+0

我要去尝试它,但我认为这是错误。我不明白我是如何忘记它的。 – jlopez

+0

正确。那是我的错误。谢谢 – jlopez

+0

很高兴帮助... –

0

检查您的areas_detalles_cpa布局包括fondo_area。另外,请记住,您无法通过循环中的相同ID来查找多个视图。

通过ID查找视图仅适用于具有该ID的视图中只有一个视图,并且您正在循环执行视图。你可以做vArea.findViewById(R.id.background_areas)来获得你需要的特定视图。