我的实现效果是ListView中有ImageView(头像) TextView(姓名) TextView(帐号) CheckBox(选择)
当我点第一页的时候CheckBox正常,点后面页面的时候 出空指针 ,高手们帮我看看 public class OtherActivity extends Activity {
private static final String TAG ="OtherActivity";
private ListView mListView;
private ArrayList<HashMap<String,Object>> mData;
private HashMap<String, Object> map;
List<Integer> list = new ArrayList<Integer>();
MultiAutoCompleteTextView maTextView;

// private ImageGetter imageGetter = new ImageGetter() {
//
// @Override
// public Drawable getDrawable(String source) {
// int id = Integer.parseInt(source);
// Drawable draw = getResources().getDrawable(id);
// draw.setBounds(0, 0, draw.getIntrinsicWidth(), draw.getIntrinsicHeight());
// return draw;
// }
// };

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.other);
ViewStub viewStub = (ViewStub) findViewById(R.id.recipients_editor_stub);
viewStub.setVisibility(View.VISIBLE);
mListView = (ListView) findViewById(R.id.item_listView);
final MultiAutoCompleteTextView maTextView = (MultiAutoCompleteTextView) findViewById(R.id.recipients_editor);
mData = new ArrayList<HashMap<String, Object>>();
for(int i=0;i<10;i++) {
map = new HashMap<String, Object>();
map.put("name", "张三"+i);
map.put("img", R.drawable.avatar_default_large);
map.put("phone", "135"+i);
map.put("ischecked", false);
mData.add(map);
}
mListView.setAdapter(new MyAdapter(OtherActivity.this, mData,list));
mListView.setOnItemClickListener(new OnItemClickListener() { @Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
// Log.i(TAG, position+" other");
ListView pListView = (ListView) parent;
View itemView = (View) pListView.getChildAt(position);
TextView itemNametv = (TextView) itemView.findViewById(R.id.item_tv_name);
String name = itemNametv.getText().toString();
Log.i(TAG, name);
这里出空指针--> CheckBox itemCheckBox = (CheckBox) itemView.findViewById(R.id.item_checkbox);
if(list.contains(new Integer(position))) {
itemCheckBox.setChecked(false);
list.remove(new Integer(position));
// RemoveTitltIcon(name);
}else {
itemCheckBox.setChecked(true);
list.add(new Integer(position));
// AddTitleIcon(name);
}
}
 

解决方案 »

  1.   

    adapter补上
    public class MyAdapter extends BaseAdapter {
    private static final String TAG ="MyAdapter";
    private LayoutInflater mLayoutInflater;
    private ArrayList<HashMap<String, Object>> mData;
    private HashMap<String, Object> map;
    private ViewHolder holder = null;
    private List<Integer> mList ;

    public MyAdapter(Context context,ArrayList<HashMap<String, Object>> mData,List<Integer> list) {
    this.mLayoutInflater = LayoutInflater.from(context);
    this.mData = mData;
    this.mList = list;
    }
    @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 position) {
    // TODO Auto-generated method stub
    return 0;
    } @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
    if(convertView==null) {
    holder = new ViewHolder();
    convertView = mLayoutInflater.inflate(R.layout.items, null);
    holder.imgIcon  = (ImageView) convertView.findViewById(R.id.item_imageView);
    holder.name  = (TextView) convertView.findViewById(R.id.item_tv_name);
    holder.phone  = (TextView) convertView.findViewById(R.id.item_tv_id);
    holder.mcb  = (CheckBox) convertView.findViewById(R.id.item_checkbox);
    convertView.setTag(holder);
    }else {
    holder = (ViewHolder) convertView.getTag();
    }
    holder.imgIcon.setImageResource((Integer)mData.get(position).get("img"));
    holder.name.setText((String)mData.get(position).get("name"));
    holder.phone.setText((String)mData.get(position).get("phone"));
    holder.mcb.setChecked((Boolean)mData.get(position).get("ischecked"));
    if(mList!=null) {
    holder.mcb.setChecked(mList.contains(new Integer(position)));
    }else {
    holder.mcb.setChecked(false);
    }
    return convertView;
    }
    public final class ViewHolder {
    public ImageView imgIcon;
    public TextView name;
    public TextView phone;
    public CheckBox mcb;
    }
      

  2.   

    确定下id为item_checkbox的CheckBox元素是否在other.xml中
      

  3.   

          CheckBox itemCheckBox = (CheckBox) itemView.findViewById(R.id.item_checkbox);
    这句跳空指针错误,说明itemView未被实例化。
    再看这句          
          View itemView = (View) pListView.getChildAt(position);
    他的作用是来实例化itemView的,但是未成功,说明pListView有问题,则再看: 
          ListView pListView = (ListView) parent;
    pListView有问题,说明parent有问题,则再看:
          public void onItemClick(AdapterView<?> parent, View view,
                        int position, long id)parent是你自定义的,问题应该会出在那儿,代码可以贴上来,或者用一楼的先试试。
      

  4.   

    问题带图原件网站
    http://www.eoeandroid.com/forum-viewthread-tid-82491-fromuid-492573.htmlother.xml  我用的是ListView  <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout android:orientation="vertical"
    android:layout_width="fill_parent" android:layout_height="fill_parent"
    xmlns:android="http://schemas.android.com/apk/res/android"
    >
    <LinearLayout android:background="@drawable/top_bg"
    android:paddingLeft="6.0dip" android:paddingTop="5.0dip"
    android:paddingRight="6.0dip" android:paddingBottom="5.0dip"
    android:layout_width="fill_parent" android:layout_height="wrap_content">
    <ViewStub android:layout_gravity="center_vertical"
    android:id="@+id/recipients_editor_stub" android:layout="@layout/recipients_editor"
    android:layout_width="fill_parent" android:layout_height="wrap_content"
    android:layout_marginLeft="4.0dip" />
    </LinearLayout>
    <LinearLayout android:gravity="center" android:id="@+id/recip_sel_tabs"
    android:background="@drawable/recip_tab_bg" android:paddingLeft="10.0dip"
    android:paddingTop="7.0dip" android:paddingRight="10.0dip"
    android:paddingBottom="7.0dip" android:layout_width="fill_parent"
    android:layout_height="wrap_content">
    <TextView android:textSize="14.669983dip" android:textColor="@color/black_75_transparent"
    android:gravity="center" android:id="@+id/recip_sel_common_btn"
    android:background="@drawable/tab_1_pressed" android:paddingTop="4.0dip"
    android:paddingBottom="4.0dip" android:layout_width="fill_parent"
    android:layout_height="wrap_content" android:text="@string/recipient_selection_common"
    android:layout_weight="0.5" />
    <TextView android:textSize="14.669983dip" android:textColor="@color/black_75_transparent"
    android:gravity="center" android:id="@+id/recip_sel_all_btn"
    android:background="@drawable/tab_2_normal" android:paddingTop="4.0dip"
    android:paddingBottom="4.0dip" android:layout_width="fill_parent"
    android:layout_height="wrap_content" android:text="@string/recipient_selection_all"
    android:layout_weight="0.5" />
    </LinearLayout>
    <FrameLayout android:paddingTop="0.0dip"
    android:layout_width="fill_parent" android:layout_height="0.0dip"
    android:layout_weight="1.0">
    <ListView android:scrollbarStyle="insideOverlay" android:id="@+id/item_listView"
    android:background="@drawable/conversation_background"
    android:fadingEdge="none" android:layout_width="fill_parent"
    android:layout_height="fill_parent" android:listSelector="@android:color/transparent"
    android:cacheColorHint="@android:color/transparent" />
    </FrameLayout>
    <LinearLayout android:gravity="center_vertical"
    android:background="@drawable/choose_bg" android:paddingLeft="10.0dip"
    android:paddingTop="6.0dip" android:paddingRight="10.0dip"
    android:paddingBottom="5.0dip" android:layout_width="fill_parent"
    android:layout_height="wrap_content">
    <TextView android:textColor="@drawable/wall_btn_text_color"
    android:gravity="center" android:id="@+id/recip_sel_ok_btn"
    android:background="@drawable/wall_edit_button_post"
    android:paddingLeft="20.0dip" android:paddingTop="5.5dip"
    android:paddingRight="20.0dip" android:paddingBottom="5.5dip"
    android:layout_width="fill_parent" android:layout_height="wrap_content"
    android:layout_marginRight="5.0dip" android:layout_weight="0.5" />
    <TextView android:textColor="#ff616366" android:gravity="center"
    android:id="@+id/recip_sel_cancel_btn" android:background="@drawable/cancel_btn"
    android:paddingLeft="20.0dip" android:paddingTop="5.5dip"
    android:paddingRight="20.0dip" android:paddingBottom="5.5dip"
    android:layout_width="fill_parent" android:layout_height="wrap_content"
    android:layout_marginLeft="5.0dip" android:text="@string/cancel"
    android:layout_weight="0.5" />
    </LinearLayout>
    </LinearLayout>
    这是items.xml<?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="wrap_content">
      <ImageView
       android:id="@+id/item_imageView"
       android:layout_width="65dp"
       android:layout_height="65dp"
       />
       <TextView
       android:layout_marginLeft="10dp"
       android:id="@+id/item_tv_name"
       android:layout_width="80dp"
       android:layout_height="wrap_content"
       android:layout_gravity="center_vertical"
       ></TextView>
       <TextView
       android:id="@+id/item_tv_id"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_gravity="center_vertical"
       android:layout_marginLeft="80dp"
       ></TextView>
       <CheckBox
       android:id="@+id/item_checkbox"
       android:layout_marginLeft="10dp"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:clickable="false"
       android:focusable="false"
       />
    </LinearLayout> 路过的帮忙定下哈  谢谢各位大大了
      

  5.   

       ListView pListView = (ListView) parent;
       View itemView = (View) pListView.getChildAt(position);
       TextView itemNametv = (TextView) itemView.findViewById(R.id.item_tv_name);
       String name = itemNametv.getText().toString();
       Log.i(TAG, name);
    这里出空指针-->CheckBox itemCheckBox = (CheckBox) itemView.findViewById(R.id.item_checkbox);
    上面这些代码改成如下试试:   TextView itemNametv = (TextView)view.findViewById(R.id.item_tv_name);
       String name = itemNametv.getText().toString();
       Log.i(TAG, name);
       CheckBox itemCheckBox = (CheckBox)view.findViewById(R.id.item_checkbox);