2013-08-26 5 views
0

Работа с флажками внутри ListView для создания контекстных баров действий дает мне следующее NullPointer исключение:NullPointer Exception адаптер GetView

08-26 09:08:54.437: E/AndroidRuntime(32343): FATAL EXCEPTION: main 
08-26 09:08:54.437: E/AndroidRuntime(32343): java.lang.NullPointerException 
08-26 09:08:54.437: E/AndroidRuntime(32343): at com.ia.developmentcheck.Allprojects$ArrayListAdapter$1.onCheckedChanged(Allprojects.java:332) 
08-26 09:08:54.437: E/AndroidRuntime(32343): at android.widget.CompoundButton.setChecked(CompoundButton.java:124) 
08-26 09:08:54.437: E/AndroidRuntime(32343): at android.widget.CompoundButton.toggle(CompoundButton.java:86) 
08-26 09:08:54.437: E/AndroidRuntime(32343): at android.widget.CompoundButton.performClick(CompoundButton.java:98) 
08-26 09:08:54.437: E/AndroidRuntime(32343): at android.view.View$PerformClick.run(View.java:9080) 
08-26 09:08:54.437: E/AndroidRuntime(32343): at android.os.Handler.handleCallback(Handler.java:587) 
08-26 09:08:54.437: E/AndroidRuntime(32343): at android.os.Handler.dispatchMessage(Handler.java:92) 
08-26 09:08:54.437: E/AndroidRuntime(32343): at android.os.Looper.loop(Looper.java:130) 
08-26 09:08:54.437: E/AndroidRuntime(32343): at android.app.ActivityThread.main(ActivityThread.java:3687) 
08-26 09:08:54.437: E/AndroidRuntime(32343): at java.lang.reflect.Method.invokeNative(Native Method) 
08-26 09:08:54.437: E/AndroidRuntime(32343): at java.lang.reflect.Method.invoke(Method.java:507) 
08-26 09:08:54.437: E/AndroidRuntime(32343): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867) 
08-26 09:08:54.437: E/AndroidRuntime(32343): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625) 
08-26 09:08:54.437: E/AndroidRuntime(32343): at dalvik.system.NativeStart.main(Native Method) 

Код:

общественного класса ArrayListAdapter расширяет BaseAdapter {

public Context mContext; 
public LayoutInflater mInflater; 
public ArrayList<HashMap<String,String>> mData; 
private SparseBooleanArray mSelectedItemsIds; 


public ArrayListAdapter(Context context, ArrayList<HashMap<String,String>> data){ 
    mSelectedItemsIds = new SparseBooleanArray(); 
    mData = data; 
    this.mContext = context; 
    mInflater = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

} 

public void toogleSelection(int position){ 
    selectView(position, !mSelectedItemsIds.get(position)); 
} 

public void removeSelection(){ 
    mSelectedItemsIds = new SparseBooleanArray(); 
    notifyDataSetChanged(); 
} 

public int getSelectedCount(){ 
    return mSelectedItemsIds.size(); 
} 

public SparseBooleanArray getSelectedIds(){ 
    return mSelectedItemsIds; 
} 

private void selectView(int position, boolean value) { 
    // TODO Auto-generated method stub 
    if(value) 
     mSelectedItemsIds.put(position, value); 
    else 
     mSelectedItemsIds.delete(position); 
} 

@Override 
public int getCount() { 
    // TODO Auto-generated method stub 
    return mData.size(); 
} 

@Override 
public Object getItem(int position) { 
    // TODO Auto-generated method stub 
    return null; 
} 

@Override 
public long getItemId(int arg0) { 
    // TODO Auto-generated method stub 
    return 0; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    // TODO Auto-generated method stub 
    ViewHolder vh; 

    if(convertView == null){ 
     vh = new ViewHolder(); 
     convertView = mInflater.inflate(R.layout.projectlist_frame, null); 
     vh.projectTitle = (TextView)convertView.findViewById(R.id.projecttitle); 
     vh.projectSector = (TextView)convertView.findViewById(R.id.projectsector); 
     vh.cb = (CheckBox)convertView.findViewById(R.id.checkBox1); 
     convertView.setTag(vh); 

    } else{ 
     vh = (ViewHolder)convertView.getTag(); 
    } 
    vh.projectTitle.setText(mData.get(position).get("title").toString()); 
    vh.projectSector.setText(mData.get(position).get("sector").toString()); 


    vh.cb.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
      // TODO Auto-generated method stub 

      mSelectedItemsIds = list.getCheckedItemPositions(); 
      boolean hasCheckedElement = false; 

      for(int i = 0; i < mSelectedItemsIds.size() && !hasCheckedElement; i++){ 
       hasCheckedElement = mSelectedItemsIds.valueAt(i); 
      }if(hasCheckedElement){ 
       if(mMode == null){ 
        startActionMode(mActionCallBack); 
        mMode.invalidate(); 
       }else { 
        mMode.invalidate(); 
       } 
      } else { 
       if(mMode !=null){ 
        mMode.finish(); 
       } 
      } 
     } 
    }); 

    return convertView; 
} 

Линия 332

for(int i = 0; i < mSelectedItemsIds.size() && !hasCheckedElement; i++) 

Это на getView() адаптера

+0

Вы дали нам три строки кода в виде строки 332. Какая строка? Кроме того, что такое 'list' и может' list.getCheckedItemPositions() 'return' null'? –

+0

@TedHopp проверить отредактированный вопрос ... Список listView. ... да его возвращение null –

+1

Единственный способ, который генерирует NPE, - это 'mSelectedItemIds'' 'null. Что такое 'list' и может' list.getCheckedItemPositions() 'return' null'? –

ответ

3

Проблема, кажется, что список не включен для выбора нескольких (или для выбора вообще, судя по всему). От the docs for getCheckedItemPositions():

Возвращает: SparseBooleanArray, которая возвращает истину для каждого вызова, чтобы получить (INT положение), где позиция является позиция в списке, или null, если режим выбора установлен на CHOICE_MODE_NONE.

Возможно, вы намереваетесь позвонить в getCheckedItemPosition() (без "s")? Убедитесь, что режим выбора списка установлен в соответствующее значение.

+0

должен ли я реализовать 'list.setChoiceMode (ListView.CHOICE_MODE_MULTIPLE);' ??? –

+0

@ user2247689 - Вам не нужно _implement_ что; вы должны _call_ это, когда настроен «ListView» (или в файле макета, используя атрибут «android: choiceMode»). –

+0

спасибо за помощь ... код работает сейчас. Большое спасибо. –

Смежные вопросы