2016-03-09 17 views
0

當我按checkAll按鈕它給NullpointerException發生在我的自定義ListView。android的NullPointerException checkAll按鈕

問題是,如果屏幕有6或7個項目,每個屏幕尺寸比它沒有問題checkAll工作butif項目是超過屏幕尺寸,然後它給NullPointerException

我已經把我下面的代碼:

// ///////////////////// checkAll/ClearAll  // /////////////////////////////////////// 

    btnCheckAll.setOnClickListener(new OnClickListener() { 

     public void onClick(View v) { 
      int count =lvHiddenApp.getAdapter().getCount(); 

      Log.i("NoOfApp", "" + count); 

      if (state) { 
       for (int i = 0; i < count; i++) { 

        RelativeLayout itemLayout = (RelativeLayout) lvHiddenApp 
          .getChildAt(i); // Find 
        CheckBox checkbox = (CheckBox) itemLayout 
          .findViewById(R.id.cbHideAppCheck); 

        checkbox.setChecked(true); 
        btnCheckAll.setText("UncheckAll"); 
        state = false; 
       } 
      } else { 
       for (int i2 = 0; i2 < count; i2++) { 
        RelativeLayout itemLayout = (RelativeLayout) lvHiddenApp 
          .getChildAt(i2); // Find 
        CheckBox checkbox = (CheckBox) itemLayout 
          .findViewById(R.id.cbHideAppCheck); 

        checkbox.setChecked(false); 

        btnCheckAll.setText("checkAll"); 
        state = true; 
       } 
      } 
     } 

    }); 

    // //////////////////////////////////////////////////////////////////////////////////////////////////// 

的logcat:

E/AndroidRuntime(2420): FATAL EXCEPTION: main 
E/AndroidRuntime(2420): java.lang.NullPointerException 
E/AndroidRuntime(2420):at com.example.settings.HiddenAppList$1.onClick(HiddenAppList.java:92) 
E/AndroidRuntime(2420):at com.rey.material.widget.RippleManager.run(RippleManager.java:83) 
E/AndroidRuntime(2420):at com.rey.material.widget.RippleManager.onClick(RippleManager.java:77) 
E/AndroidRuntime(2420):at android.view.View.performClick(View.java:4240) 
E/AndroidRuntime(2420):at android.view.View$PerformClick.run(View.java:17721) 
E/AndroidRuntime(2420):at android.os.Handler.handleCallback(Handler.java:730) 
E/AndroidRuntime(2420):at android.os.Handler.dispatchMessage(Handler.java:92) 
E/AndroidRuntime(2420):at android.os.Looper.loop(Looper.java:137) 
E/AndroidRuntime(2420):at android.app.ActivityThread.main(ActivityThread.java:5103) 
E/AndroidRuntime(2420):at java.lang.reflect.Method.invokeNative(Native Method) 
E/AndroidRuntime(2420):at java.lang.reflect.Method.invoke(Method.java:525) 
E/AndroidRuntime(2420):at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
E/AndroidRuntime(2420):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
03-09 12:17:48.083: E/AndroidRuntime(2420):at dalvik.system.NativeStart.main(Native Method) 

XML文件:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" > 

<ImageView 
    android:id="@+id/ivHideAppIcon" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentTop="true" 
    android:contentDescription="@+id/img" 
    android:src="@drawable/ic_launcher" /> 

<com.rey.material.widget.TextView 
    android:id="@+id/tvHideAppText" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_toRightOf="@id/ivHideAppIcon" 
    android:padding="4dp" 
    android:text="@string/hidden_app" /> 

<CheckBox 
    android:id="@+id/cbHideAppCheck" 
    style="@style/CheckBoxDrawable" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentRight="true" 
    android:checked="false" /> 

適配器文件:

public class HideAppListviewAdapter extends BaseAdapter {     

public HideAppListviewAdapter() { 

    // TODO Auto-generated constructor stub 
} 

String i; 
ArrayList<String> state = new ArrayList<String>();; 
Context context; 
private ArrayList<Category> items; 
private LayoutInflater mInflater; 

public class ViewHolder { 
    public ImageView imageView; 
    public TextView textTitle; 
    public CheckBox cb; 
    public Button btnitem; 
} 

public HideAppListviewAdapter(Context context, ArrayList<Category> cat) { 

    mInflater = (LayoutInflater) context 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    this.context = context; 
    items = cat; 
    Log.i("itemsizepela", "" + items.size()); 
} 

public ArrayList<Category> getItems() { 
    return items; 
} 

public void setItems(ArrayList<Category> items) { 
    this.items = items; 
} 

@Override 
public int getCount() { 
    if (items != null) { 
     return items.size(); 
    } 
    return 0; 
} 

@Override 
public void notifyDataSetChanged() { 
    super.notifyDataSetChanged(); 
} 

@Override 
public Category getItem(int position) { 
    if (items != null && position >= 0 && position < getCount()) { 
     return items.get(position); 
    } 
    return null; 
} 

@Override 
public long getItemId(int position) { 
    if (items != null && position >= 0 && position < getCount()) { 
     return items.get(position).id; 
    } 
    return 0; 
} 

public void setItemsList(ArrayList<Category> locations) { 
    this.items = locations; 
} 

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

    View view = convertView; 
    final ViewHolder viewHolder; 
    final Category gridItems = getItem(position); 

    if (view == null) { 

     view = mInflater.inflate(R.layout.hidden_app_list_item, parent, 
       false); 

     viewHolder = new ViewHolder(); 

     viewHolder.imageView = (ImageView) view 
       .findViewById(R.id.ivHideAppIcon); 
     viewHolder.textTitle = (TextView) view 
       .findViewById(R.id.tvHideAppText); 
     viewHolder.cb = (CheckBox) view.findViewById(R.id.cbHideAppCheck); 

     view.setTag(viewHolder); 
     CheckBox cbBuy = (CheckBox) view.findViewById(R.id.cbHideAppCheck); 
     cbBuy.setOnCheckedChangeListener(myCheckChangList); 
     cbBuy.setTag(position); 
     cbBuy.setChecked(gridItems.box); 

    } else { 
     viewHolder = (ViewHolder) view.getTag(); 
    } 

    setCatImage(position, viewHolder, gridItems.name, gridItems.icon); 

    return view; 
} 

@SuppressLint("NewApi") 
private void setCatImage(int pos, ViewHolder viewHolder, String catTitle, 
     Drawable icon) { 
    viewHolder.imageView.setImageDrawable(icon); 
    viewHolder.textTitle.setText(catTitle); 
} 

ArrayList<Category> getBox() { 
    ArrayList<Category> box = new ArrayList<Category>(); 
    for (Category p : items) { 
     if (p.box) 
      box.add(p); 
    } 
    return box; 
} 

OnCheckedChangeListener myCheckChangList = new OnCheckedChangeListener() { 
    public void onCheckedChanged(CompoundButton buttonView, 
      boolean isChecked) { 
     getItem((Integer) buttonView.getTag()).box = isChecked; 

    } 
}; 
} 
+1

Plz share xml以及 –

+1

分享您的適配器代碼 –

+1

您是否初始化'btnCheckAll'和'lvHiddenApp'? –

回答

-1

甚至在將適配器設置爲列表視圖之前,您是否嘗試單擊該按鈕?否則,請輸入完整的代碼或logcat日誌。

0

您從lvHiddenApp.getChildAt(i)獲得空值返回值。 ListViews只保留屏幕上項目的充氣視圖。當一個項目離開屏幕時,該視圖將被重新用於新項目,並且只需填充新數據(在您的適配器中)。

你必須保持你的物品狀態(如選擇)在你的適配器,而不是UI組件。

確保您的適配器實現能夠正確初始化所有視圖的狀態,或者我想您會遇到一些有趣的問題(嘗試檢查長列表中的單個項目,然後向下滾動,然後您會看到我意思)。

相關問題