2

工作,我得到以下错误(使用最新的支持库v23.0和建立SDK 23):程序兼容性 - 微调不RelativeLayout的

案例1:安卓4.2.1

java.lang.NullPointerException 
at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:523) 
at android.view.View.measure(View.java:15612) 
at android.support.v7.internal.widget.ListViewCompat.measureHeightOfChildrenCompat(ListViewCompat.java:301) 
at android.support.v7.widget.ListPopupWindow.buildDropDown(ListPopupWindow.java:1200) 
at android.support.v7.widget.ListPopupWindow.show(ListPopupWindow.java:584) 
at android.support.v7.widget.AppCompatSpinner$DropdownPopup.show(AppCompatSpinner.java:766) 
at android.support.v7.widget.AppCompatSpinner.performClick(AppCompatSpinner.java:424) 
at android.view.View$PerformClick.run(View.java:17439) 
at android.os.Handler.handleCallback(Handler.java:725) 
at android.os.Handler.dispatchMessage(Handler.java:92) 
at android.os.Looper.loop(Looper.java:153) 
at android.app.ActivityThread.main(ActivityThread.java:5341) 
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:929) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696) 
at dalvik.system.NativeStart.main(Native Method) 

案例2:Android 4.3的

java.lang.NullPointerException 
at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:578) 
at android.view.View.measure(View.java:16831) 
at android.support.v7.internal.widget.ListViewCompat.measureHeightOfChildrenCompat(ListViewCompat.java:301) 
at android.support.v7.widget.ListPopupWindow.buildDropDown(ListPopupWindow.java:1200) 
at android.support.v7.widget.ListPopupWindow.show(ListPopupWindow.java:584) 
at android.support.v7.widget.AppCompatSpinner$DropdownPopup.show(AppCompatSpinner.java:766) 
at android.support.v7.widget.AppCompatSpinner.performClick(AppCompatSpinner.java:424) 
at android.view.View$PerformClick.run(View.java:18786) 
at android.os.Handler.handleCallback(Handler.java:730) 
at android.os.Handler.dispatchMessage(Handler.java:92) 
at android.os.Looper.loop(Looper.java:176) 
at android.app.ActivityThread.main(ActivityThread.java:5419) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:525) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862) 
at dalvik.system.NativeStart.main(Native Method) 

其实我也不知道从哪里开始搜索。我从崩溃中得到这个错误,无法在手机上重现。我不知道它是从哪里来的。

我搜索我的代码,我没有Spinner直接嵌套在任何RelativeLayout ...

有没有人有一个提示是什么导致这个问题呢?

变化在我的代码我做了

主要是我从支持库更新和建立SDK V22 V23来。而且我从来没有像这之前一个问题...

错误原因,展示了基于Android中4.2.1的错误:

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.2.1_r1.2/android/widget/RelativeLayout.java#RelativeLayout

在这里,在523线...这就是我从错误报告我收到得到...

523 if (mLayoutParams.height >= 0) { 
524 height = Math.max(height, mLayoutParams.height); 
525 } 

在Android 4.3的它实际上是同一个问题,mLayoutParams是空...

+0

更新支持23 .0.1可能是其解决方案 –

+0

我可以这样做,但问题不在此处列出:http://developer.android.com/tools/support-library/index.html。所以我不知道如果问题是由支持库造成的... – prom85

+1

java.lang.NullPointerException –

回答

5

我找到了原因。

我使用的许多适配器,并在其中的一个我不小心没有附加视图到根视图...这appearently是大多数设备和Android版本没有问题,但对一些...

convertView = mInflater.inflate(mLayoutRes, null); 

应该

convertView = mInflater.inflate(mLayoutRes, null, false); 

如果适配器在使用Spinner ...

+0

我有这个问题,我的Android项目22升级到23在Android设备17上运行。他的解决方案为我工作。谢谢。 –

+0

我需要添加视图组而不是null。 –

0

尝试使用下面的代码:

activity_main.xml中

<RelativeLayout xmlns:androclass="http://schemas.android.com/apk/res/android" 
     xmlns:tools="http://schemas.android.com/tools" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     tools:context=".MainActivity" > 

     <Spinner 
      android:id="@+id/spinner1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentTop="true" 
      android:layout_centerHorizontal="true" 
      android:layout_marginTop="83dp" /> 

    </RelativeLayout> 

MainActivity.java:

package com.example.spinner; 
import android.app.Activity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.Spinner; 
import android.widget.TextView; 
import android.widget.Toast; 

public class MainActivity extends Activity implements 
AdapterView.OnItemSelectedListener { 

    String[] country = { "India", "USA", "China", "Japan", "Other", }; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     //Getting the instance of Spinner and applying OnItemSelectedListener on it 
     Spinner spin = (Spinner) findViewById(R.id.spinner1); 
     spin.setOnItemSelectedListener(this); 


     ArrayAdapter aa = new ArrayAdapter(this,android.R.layout.simple_spinner_item,country); 
     aa.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

     spin.setAdapter(aa); 
    } 



    @Override 
    public void onItemSelected(AdapterView<?> arg0, View arg1, int position,long id) { 
     Toast.makeText(getApplicationContext(),country[position] ,Toast.LENGTH_LONG).show(); 
    } 

    @Override 
    public void onNothingSelected(AdapterView<?> arg0) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 
} 
+0

我无法重现该错误。只有一些设备有它。我有我的应用程序运行一年现在没有问题,所以要么我介绍了一个错误,或新的支持库有一个... – prom85

+0

因此,该应用程序在某些设备上运行? –

+0

没问题。在我的设备上,我可以使用每一个微调没有任何问题 – prom85

0

你赶上柜面你抬高布局,只有一个视图(不Vie的除外wGroup)。 例 的Android:布局/ simple_spinner_dropdown_item只有CheckedTextView:

<?xml version="1.0" encoding="utf-8"?> 
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/text1" 
    style="?android:attr/spinnerDropDownItemStyle" 
    android:singleLine="true" 
    android:layout_width="match_parent" 
    android:layout_height="?android:attr/dropdownListPreferredItemHeight" 
    android:ellipsize="marquee"/> 

您可以修复它在你的适配器项目视图的布局添加一个ViewGroup中:

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

@ prom85解决方案并没有为我工作直到我通过了parentViewGroup代替null的:

convertView = mInflater.inflate(mLayoutRes, parent, false); 
+0

通常情况下,只有在您想使用它的主题时才需要父项,所以尽可能使用父项是一件好事。 – prom85