目前我的listview上有一个复选框,从BaseAdapter我已经设置了我自己的id的复选框ID。 当我从Activity访问此id时。我得到空指针异常?虽然我调试我仍然有空指针异常?
是否无法手动设置复选框的ID。 Checkbox确实有一个方法 setId(int id)。
对checkBox.getId()的空指针异常的任何想法? 这是我的getView(),其中我设置了checkBox id。
viewHolder.checkBox.setId(myList.get(position).getId());
On Activity我已经这样做因为我必须删除所有已检查的CheckBox。
private void deleteCheckItems() {
SparseBooleanArray booleanArray = listView.getCheckedItemPositions();
for (int i = 0; i < listView.getCount(); i++) {
if (booleanArray.get(i))
Toast.makeText(getBaseContext(), " the selected index is " + i, Toast.LENGTH_SHORT).show();
}
}
我从这个方法获得空指针异常
编辑:我的源代码如下:
public View getView(int position, View view, ViewGroup parent){
ViewHolder viewHolder;
if(view==null){
viewHolder = new ViewHolder();
view = layoutInfalter.inflate(R.layout.item_row,null);
viewHolder.checkBox = (CheckBox)view.findViewById(R.id.CheckBoxId);
if(VIEW_MODE==-1){
viewHolder.checkBox.setVisibility(View.INVISIBLE);
}else{
myAdapter.setViewMode(1);
viewHolder.checkBox.setVisibility(View.VISIBLE);
viewHolder.checkBox.setId(myList.get(position).getId());
}
viewHolder.text1= (TextView)view.findViewById(R.id.text1);
viewHolder.text2 =TextView)view.findViewById(R.id.text2);
view.setTag(viewHolder);
}else{
viewHolder = (ViewHolder)view.getTag();
}
viewHolder.text1.setText(myList.get(position).getText1());
viewHolder.text2.setText(myList.get(position).getText2());
//viewHolder.checkBox.setId(myList.get(position).getId());
return view;
}
答案 0 :(得分:0)
这可能对你有帮助!!
它对我有用:
<强> ROW.xml 强>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="center"
android:background="#ffffff">
<RelativeLayout
android:id="@+id/actionsLayout"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_alignParentRight="true"
android:paddingRight="10dip"
android:gravity="center"
android:paddingBottom="10dip">
//change it to CheckBox
<ImageView
android:id="@+id/markFav"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/heart"/>
</RelativeLayout>
<RelativeLayout
android:id="@+id/textLayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center_vertical"
android:layout_toLeftOf="@+id/actionsLayout"
android:layout_margin="10dip">
<TextView
android:id="@+id/status"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:lines="4"
android:gravity="center_vertical"
android:ellipsize="end"
android:textColor="#000000"
android:text="Row Text Here"/>
</RelativeLayout>
</RelativeLayout>
在上面的xml中将ImageView更改为CheckBox。并编辑你的getView,如:
你的baseAdapter中的GetView方法:
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
System.out.println("in getView");
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.row, null);
holder = new ViewHolder();
System.out.println("After holder");
holder.name= (TextView) convertView.findViewById(R.id.status);
//Change this to Checkbox and also add that checkbox in your ViewHolder and edit your implementation as per required.
holder.heart = (ImageView) convertView.findViewById(R.id.image);
//do not set on Click Listener if it is a CheckBox
holder.heart.setOnClickListener(this);
System.out.println("After holder text");
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
System.out.println("in else part");
}
//convertView.setBackgroundColor((position & 1) == 1 ? Color.WHITE : Color.LTGRAY);
System.out.println("After set background");
if(status.size()>0){
holder.name.setText(status.get(position).desc.toString());
}
return convertView;
}
public void onClick(View v) {
// TODO Auto-generated method stub
switch(v.getId()){
case R.id.markFav:
System.out.println("**MARK FAV CLICKED");
break;
}
}
在上面的getView方法中,将ImageView更改为复选框,并将其引用到row.xml中相应的复选框id。同时使用onCLickListener实现BaseAdapter类,以便能够在该基本适配器类中获取onClick方法
希望你明白我的观点。任何困惑请问我..
感谢
沙