最新バージョンの互換性lib(つまり、4.3 Androidバージョンでリリースされたv18 of compat-lib)を使用しているときにNullpointer例外に直面しています。アクションバーのリストナビゲーションメニューモード。このエラーはAndroid 2.3.3バージョンで発生します。このバージョン(と他のバージョン)では、使用されているアクションバーコード全体がcompat-libコードであるため、それは信じています。ここでアクションバーリストメニューでカスタムアダプタを使用しているときのヌルポインタ
07-30 18:17:59.296: E/AndroidRuntime(14701): FATAL EXCEPTION: main
07-30 18:17:59.296: E/AndroidRuntime(14701): java.lang.NullPointerException
07-30 18:17:59.296: E/AndroidRuntime(14701): at android.support.v7.internal.widget.ListPopupWindow$DropDownListView.measureHeightOfChildrenCompat(ListPopupWindow.java:1317)
07-30 18:17:59.296: E/AndroidRuntime(14701): at android.support.v7.internal.widget.ListPopupWindow.buildDropDown(ListPopupWindow.java:1062)
07-30 18:17:59.296: E/AndroidRuntime(14701): at android.support.v7.internal.widget.ListPopupWindow.show(ListPopupWindow.java:514)
07-30 18:17:59.296: E/AndroidRuntime(14701): at android.support.v7.internal.widget.SpinnerICS$DropdownPopup.show(SpinnerICS.java:758)
07-30 18:17:59.296: E/AndroidRuntime(14701): at android.support.v7.internal.widget.SpinnerICS.performClick(SpinnerICS.java:443)
07-30 18:17:59.296: E/AndroidRuntime(14701): at android.view.View$PerformClick.run(View.java:9109)
07-30 18:17:59.296: E/AndroidRuntime(14701): at android.os.Handler.handleCallback(Handler.java:587)
07-30 18:17:59.296: E/AndroidRuntime(14701): at android.os.Handler.dispatchMessage(Handler.java:92)
07-30 18:17:59.296: E/AndroidRuntime(14701): at android.os.Looper.loop(Looper.java:130)
07-30 18:17:59.296: E/AndroidRuntime(14701): at android.app.ActivityThread.main(ActivityThread.java:3683)
07-30 18:17:59.296: E/AndroidRuntime(14701): at java.lang.reflect.Method.invokeNative(Native Method)
07-30 18:17:59.296: E/AndroidRuntime(14701): at java.lang.reflect.Method.invoke(Method.java:507)
07-30 18:17:59.296: E/AndroidRuntime(14701): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:895)
07-30 18:17:59.296: E/AndroidRuntime(14701): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:653)
07-30 18:17:59.296: E/AndroidRuntime(14701): at dalvik.system.NativeStart.main(Native Method)
は(item_menu_dropdown_celula.xmlと呼ばれる)ドロップダウン細胞のxmlです::私は(アクションバーでの)リストメニューに私のアプリのクラッシュをクリックして、私はlogcatで次のエラーが表示さ
public class SpinnerListMenu implements SpinnerAdapter{
private List<ItemMenu> itens;
private LayoutInflater inflater;
public SpinnerListMenu(Context context, List<ItemMenu> listaItens) {
this.itens = listaItens;
this.inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return itens.size();
}
@Override
public ItemMenu getItem(int arg0) {
return itens.get(arg0);
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public int getItemViewType(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
View row = convertView;
if ((row == null) || (row.getTag() == null)) {
row = inflater.inflate(R.layout.item_menu_celula, null);
holder = new ViewHolder(row);
row.setTag(holder);
} else {
holder = (ViewHolder) row.getTag();
}
ItemMenu atual = getItem(position);
holder.texto.setText(atual.getNomeDaArea());
holder.icone.setBackgroundResource(atual.getIconeMenuFechadoResource());
holder.icone.setScaleType(ScaleType.FIT_CENTER);
return row;
}
private class ViewHolder {
ImageView icone;
TextView texto;
public ViewHolder(View base) {
icone = (ImageView) base.findViewById(R.id.icone);
texto = (TextView) base.findViewById(R.id.texto);
}
}
@Override
public int getViewTypeCount() {
return 0;
}
@Override
public boolean hasStableIds() {
return false;
}
@Override
public boolean isEmpty() {
return itens.size() == 0;
}
@Override
public void registerDataSetObserver(DataSetObserver observer) {
}
@Override
public void unregisterDataSetObserver(DataSetObserver observer) {
}
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
final ViewHolderDD holder;
View row = convertView;
if ((row == null) || (row.getTag() == null)) {
row = inflater.inflate(R.layout.item_menu_dropdown_celula, null);
holder = new ViewHolderDD(row);
row.setTag(holder);
} else {
holder = (ViewHolderDD) row.getTag();
}
ItemMenu atual = getItem(position);
holder.texto.setText(atual.getNomeDaArea());
holder.icone.setBackgroundResource(atual.getIconeMenuAbertoResource());
return row;
}
private class ViewHolderDD {
ImageView icone;
TextView texto;
public ViewHolderDD(View base) {
icone = (ImageView) base.findViewById(R.id.icone);
texto = (TextView) base.findViewById(R.id.texto);
}
}
}
で:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/spinner_subitem_background_ab_boadicatema"
android:gravity="center"
android:minHeight="?android:attr/listPreferredItemHeight"
android:orientation="horizontal" >
<ImageView
android:id="@+id/icone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dip"
android:scaleType="fitCenter" />
<TextView
android:id="@+id/texto"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="5dip"
android:gravity="left|center_vertical"
android:shadowColor="@android:color/black"
android:shadowDx="0"
android:shadowDy="1"
android:shadowRadius="0.1"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="@android:color/white"
android:textStyle="bold" />
</LinearLayout>
そしてここでは、スピナーアダプターのコードです私はメニューと彼のアダプターをコードで設定しました:
//This class correctly extends ActionBarActivity
//here we area inside onCreate method
getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
ArrayList<ItemMenu> itens = = new ArrayList<ItemMenu>();
//Here I add 2 itens in the arraylist
//...
getSupportActionBar().setListNavigationCallbacks(
new SpinnerListMenu(this, itens), this);
さらに詳しい情報があります。私の活動で、アレイアダプタを使用しているときなど、...
SpinnerAdapter mSpinnerAdapter = ArrayAdapter.createFromResource(this, R.array.action_list,
android.R.layout.simple_spinner_dropdown_item);
これは動作しますが、バグは発生しません。
このバグの原因について誰かが手掛かりを持っていますか? (これは互換性のlib自体のバグでも(私の推測では、スタックトレースを見て、自分のxmlの多くのプロパティを変更した後))
感謝を交換することです! – nsL
+1 ...本当に良い。私の時間を節約しました。 – AndroidHacker