2015-08-11 1 views
-1

я закодирован в OnItemClickListener, как я всегда закодировали:OnItemClickListener NullPointerException по некоторым пунктам, но не все из них

@Override 
protected AdapterView.OnItemClickListener setDrawerClickListener(){ 
    AdapterView.OnItemClickListener customListener=new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
      Intent lancia=null; 
      HomeActivity.this.closeDrawer(); 
      try { 
       switch (i) { 
        case 0: 
         log.d("CLICK","I0: "+i); 
         break; 
        case 1: 
         log.d("CLICK","I1: "+i); 
         if (makeLayout.getVisibility() == View.VISIBLE) { 
          hideMakeMenu(); 
          showMenu(); 
         } 
         HomeActivity.this.changeDrawerSelected(new boolean[]{false, true, false, false, false, false, false, false}); 
         break; 
        case 2: 
         log.d("CLICK","I2: "+i); 
         break; 
        case 3: 
         log.d("CLICK","I3: "+i); 
         break; 
        case 4: 
         log.d("CLICK","I4: "+i); 
         if (makeLayout.getVisibility() == View.GONE) { 
          hideMenu(); 
          showMakeMenu(); 
         } 
         HomeActivity.this.changeDrawerSelected(new boolean[]{false, false, false, false, true, false, false, false}); 
         break; 
        case 5: 
         log.d("CLICK","I5: "+i); 
         //lancia = new Intent("com.recquest.LIST"); 
         //lancia.putExtra("WHICH", "AROUND"); 
         showMakeMenu(); 
         break; 
        case 6: 
         log.d("CLICK","I6: "+i); 
         lancia = new Intent(HomeActivity.this,HomeActivity.class); 
         lancia.putExtra("WHICH", "MINE"); 
         break; 
        case 7: 
         log.d("CLICK","I7: "+i); 
         break; 
       } 
       if (lancia != null) 
        startActivity(lancia); 
      }catch(Exception e){} 
     } 
    }; 
    return customListener; 
} 

Он находится внутри метода, как моя деятельность продолжается еще BaseActivity я создал сам. Когда один элемент щелкнут, журнал правильно показывает, какой из них нажат. Проблема в том, что случаи 1 и 4 отлично работают, но другие бросают исключение NullPointerException в методе getView пользовательского адаптера (рендеринг listView идеален). Вот как я инициализировать адаптер, как можно видеть, все элементы инициализируются таким же образом, а затем оказывается красиво на экране:

метод
private DrawerItem[] initializeDrawerArray(boolean[] selected){ 
    DrawerItem[] pz=new DrawerItem[8]; 
    if(selected[0]){ 
     pz[0]=new DrawerItem(null,DrawerItemType.PROFILE_ITEM,0,true); 
    }else{ 
     pz[0]=new DrawerItem(null,DrawerItemType.PROFILE_ITEM,0,false); 
    } 
    if(selected[1]){ 
     pz[1]=new DrawerItem(getResources().getString(R.string.drawer_home),DrawerItemType.REGULAR_ITEM,R.drawable.home_red,true); 
    }else{ 
     pz[1]=new DrawerItem(getResources().getString(R.string.drawer_home),DrawerItemType.REGULAR_ITEM,R.drawable.home,false); 
    } 
    pz[2]=new DrawerItem(null,DrawerItemType.DIVIDER,0,false); 
    if(selected[3]){ 
     pz[3]=new DrawerItem(getResources().getString(R.string.drawer_most),DrawerItemType.REGULAR_ITEM,R.drawable.most_red,true); 
    }else{ 
     pz[3]=new DrawerItem(getResources().getString(R.string.drawer_most),DrawerItemType.REGULAR_ITEM,R.drawable.most,false); 
    } 
    if(selected[4]){ 
     pz[4]=new DrawerItem(getResources().getString(R.string.drawer_new),DrawerItemType.REGULAR_ITEM,R.drawable.newreq_red,true); 
    }else{ 
     pz[4]=new DrawerItem(getResources().getString(R.string.drawer_new),DrawerItemType.REGULAR_ITEM,R.drawable.newreq,false); 
    } 
    if(selected[5]){ 
     pz[5]=new DrawerItem(getResources().getString(R.string.drawer_around),DrawerItemType.REGULAR_ITEM,R.drawable.aroundme_red,true); 
    }else{ 
     pz[5]=new DrawerItem(getResources().getString(R.string.drawer_around),DrawerItemType.REGULAR_ITEM,R.drawable.aroundme,false); 
    } 
    if(selected[6]){ 
     pz[6]=new DrawerItem(getResources().getString(R.string.drawer_my),DrawerItemType.REGULAR_ITEM,R.drawable.myreq_red,true); 
    }else{ 
     pz[6]=new DrawerItem(getResources().getString(R.string.drawer_my),DrawerItemType.REGULAR_ITEM,R.drawable.myreq,false); 
    } 
    if(selected[7]){ 
     pz[7]=new DrawerItem(getResources().getString(R.string.drawer_browse),DrawerItemType.REGULAR_ITEM,R.drawable.live_red,true); 
    }else{ 
     pz[7]=new DrawerItem(getResources().getString(R.string.drawer_browse),DrawerItemType.REGULAR_ITEM,R.drawable.live,false); 
    } 
    return pz; 
} 

Эта инициализация находится внутри BaseActivity, тот моя деятельность продолжается.

Кто-нибудь получил эту ошибку раньше? Это довольно странно, потому что я получил ошибку, даже если ничего не находится внутри кожух переключателя выполняется

Edit: Вот StackTrace

08-11 22:49:15.429 13775-13775/com.recquest.recquestapp E/AndroidRuntime﹕ FATAL EXCEPTION: main 
java.lang.NullPointerException 
     at com.recquest.recquestapp.DrawerAdapter.getView(DrawerAdapter.java:63) 
     at android.widget.AbsListView.obtainView(AbsListView.java:1588) 
     at android.widget.ListView.makeAndAddView(ListView.java:1772) 
     at android.widget.ListView.fillSpecific(ListView.java:1315) 
     at android.widget.ListView.layoutChildren(ListView.java:1601) 
     at android.widget.AbsListView.onLayout(AbsListView.java:1439) 
     at android.view.View.layout(View.java:7175) 
     at android.support.v4.widget.DrawerLayout.onLayout(DrawerLayout.java:931) 
     at android.view.View.layout(View.java:7175) 
     at android.widget.FrameLayout.onLayout(FrameLayout.java:338) 
     at android.view.View.layout(View.java:7175) 
     at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1254) 
     at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1130) 
     at android.widget.LinearLayout.onLayout(LinearLayout.java:1047) 
     at android.view.View.layout(View.java:7175) 
     at android.widget.FrameLayout.onLayout(FrameLayout.java:338) 
     at android.view.View.layout(View.java:7175) 
     at android.widget.FrameLayout.onLayout(FrameLayout.java:338) 
     at android.view.View.layout(View.java:7175) 
     at android.view.ViewRoot.performTraversals(ViewRoot.java:1144) 
     at android.view.ViewRoot.handleMessage(ViewRoot.java:1863) 
     at android.os.Handler.dispatchMessage(Handler.java:99) 
     at android.os.Looper.loop(Looper.java:130) 
     at android.app.ActivityThread.main(ActivityThread.java:3687) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:507) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:878) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:636) 
     at dalvik.system.NativeStart.main(Native Method) 

Edit2:

public class DrawerAdapter extends BaseAdapter { 
DrawerItem[] items; 
Context mCtx; 
int layout; 
PicManager mPicManager; 
MyLog log=new MyLog(); 
public DrawerAdapter(Context ctx,int layout,DrawerItem[] items){ 
    this.items=items; 
    this.mCtx=ctx; 
    this.layout=layout; 
    mPicManager=new PicManager(); 
} 

@Override 
public int getCount(){ 
    return items.length; 
} 
@Override 
public Object getItem(int i){ 
    return items[i]; 
} 
@Override 
public long getItemId(int arg0){ 
    return arg0; 
} 
@Override 
public View getView(int arg0,View arg1,ViewGroup arg2){ 
    View row=arg1; 
    DrawerItemHolder holder=null; 
    if(row==null){ 
     LayoutInflater inflater=((Activity)mCtx).getLayoutInflater(); 
     row=inflater.inflate(layout,arg2,false); 
     holder=new DrawerItemHolder(); 
     holder.back=(RelativeLayout)row.findViewById(R.id.background); 
     holder.layout=(RelativeLayout)row.findViewById(R.id.layout); 
     holder.profilePic=(SvgImageView)row.findViewById(R.id.customShapeImageView); 
     holder.divisorio=(ImageView)row.findViewById(R.id.imageView2); 
     holder.icon=(ImageView)row.findViewById(R.id.imageView1); 
     holder.text=(TextView)row.findViewById(R.id.textView1); 
    }else{ 
     holder=(DrawerItemHolder)row.getTag(); 
    } 
    switch(items[arg0].type) { 
     case DrawerItemType.PROFILE_ITEM: 
      holder.icon.setVisibility(View.GONE); 
      holder.divisorio.setVisibility(View.GONE); 
      if (items[arg0].selected) { 
       holder.text.setTextColor(this.mCtx.getResources().getColor(R.color.dark_red)); 
       holder.back.setBackgroundColor(this.mCtx.getResources().getColor(R.color.selected_menu_back)); 
       holder.layout.setBackgroundColor(this.mCtx.getResources().getColor(R.color.selected_menu_back)); 
      } 
      if (mPicManager.getMyPic() != null) { 
       holder.profilePic.setImageBitmap(mPicManager.getMyPic()); 
      } else { 
       mPicManager.downloadMyPic(); 
      } 
      LocalProfile local = LocalProfile.getLocalProfile(mCtx); 
      if (local != null) 
       holder.text.setText(local.nome.toUpperCase() + " " + local.cognome.toUpperCase()); 
      break; 
     case DrawerItemType.REGULAR_ITEM: 
      holder.profilePic.setVisibility(View.GONE); 
      holder.divisorio.setVisibility(View.GONE); 
      holder.icon.setImageDrawable(this.mCtx.getResources().getDrawable(items[arg0].resID)); 
      holder.text.setText(items[arg0].name); 
      if (items[arg0].selected) { 
       holder.text.setTextColor(this.mCtx.getResources().getColor(R.color.dark_red)); 
       holder.back.setBackgroundColor(this.mCtx.getResources().getColor(R.color.selected_menu_back)); 
       holder.layout.setBackgroundColor(this.mCtx.getResources().getColor(R.color.selected_menu_back)); 
      } 
      break; 
     case DrawerItemType.DIVIDER: 
      holder.profilePic.setVisibility(View.GONE); 
      holder.icon.setVisibility(View.GONE); 
      holder.text.setVisibility(View.GONE); 
      holder.divisorio.setVisibility(View.VISIBLE); 
      break; 
    } 
    return row; 
} 

class DrawerItemHolder{ 
TextView text; 
SvgImageView profilePic; 
ImageView icon,divisorio; 
RelativeLayout back,layout; 
+1

post stack trace? – Krish

+0

добавил, он не говорит много мне –

+0

Я не могу думать, что это проблема, связанная с адаптером, поскольку она отлично работает при рендеринге, а в двух элементах также нажмите –

ответ

0

заказ ваш код на line 63 внутри вашего класса DrawerAdapter, то есть там, где приложение ломается. Вы используете какой-то объект, который еще не был инициализирован, и позвонил ему.

Поместите точку останова в условное место, где вы инициализируете объект. Пройдите через код. Здесь недостаточно информации, чтобы узнать, почему объект не инициализирован. Не помешало бы поместить номера строк в класс draweradapter.

What is a NullPointerException, and how do I fix it?

+0

Я понял это, но почему это работает на другие предметы? Они инициализируются одним и тем же кодом –