2 ssummeraw ssummeraw 于 2013.04.22 17:07 提问

Listvew 中 textview 和 checkbox 的问题

我想创建一个listview,包含textview 和 checkbox。我创建好了 listview,也可以捕捉listview item select,但是当我想捕捉 checkbox 的select和unselect时,获得null pointer exception异常。如何给checkbox创建setOnCheckedChangeListener()?

public class LocationActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.locationmain);
    ListView listview = (ListView) findViewById(R.id.listView1);
    String selectQuery = "SELECT  * FROM " +     DatabaseHandler.TABLE_LOCATIONLABLES;
    SQLiteDatabase db = new DatabaseHandler(this).getReadableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);
    final List<String> locLables = new ArrayList<String>();
    if(cursor != null){
        if (cursor.moveToFirst()) {
            do {
                locLables.add(cursor.getString(1));

            } while (cursor.moveToNext());
        }
    }
    //String[] locLables = new String[] {"Home","University","Office"};
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.locationmain_entry,R.id.textView12, locLables);
    //cb gives a null pointer exception
    CheckBox cb = (CheckBox) listview.findViewById(R.id.checkBox12);
    cb.setOnCheckedChangeListener(new OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            // TODO Auto-generated method stub
            if(isChecked){
                System.out.println("selected");
            }else if(!isChecked){
                System.out.println("not selected");
            }
        }
    });     
    listview.setAdapter(adapter);
    listview.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                long arg3) {
            // TODO Auto-generated method stub
            Toast.makeText(getApplicationContext(), locLables.get(arg2), Toast.LENGTH_SHORT).show();
        }
    });
}

3个回答

yongyong_21
yongyong_21   2013.04.23 10:43
已采纳

你可以保持独立的 adpater 类,那样就可以实现

public class bsAdapter extends BaseAdapter
 {
   Activity cntx;
   public bsAdapter(Activity context)
   {
     // TODO Auto-generated constructor stub
     this.cntx=context;

   }

   public int getCount()
   {
     // TODO Auto-generated method stub
     return listview_arr.length;
   }

  public Object getItem(int position)
  {
     // TODO Auto-generated method stub
     return listview_arr[position];
  }

  public long getItemId(int position)
  {
     // TODO Auto-generated method stub
     return listview_array.length;
  }

  public View getView(final int position, View convertView, ViewGroup parent)
  {
     View row=null;

    LayoutInflater inflater=cntx.getLayoutInflater();
    row=inflater.inflate(R.layout.search_list_item, null);

    TextView tv=(TextView)row.findViewById(R.id.title);
    CheckBox cb=(CheckBox)row.findViewById(R.id.cb01);


    tv.setText(listview_arr[position]);

    cb.setOnClickListener(new OnClickListener(){

    public void onClick(View v) {

    if(cb.ischecked)
    {
       //ur code
    }

    else //ur code

    }
  });

  return row;
  }
 }
baimy1985
baimy1985   2013.04.22 21:13

你的CheckBox cb = (CheckBox) listview.findViewById(R.id.checkBox12); 是不是要放到listview.setAdapter(adapter);后面

qq_35182702
qq_35182702   2016.06.17 23:21

public class bsAdapter extends BaseAdapter
{
Activity cntx;
public bsAdapter(Activity context)
{
// TODO Auto-generated constructor stub
this.cntx=context;

}

public int getCount()
{
// TODO Auto-generated method stub
return listview_arr.length;
}

public Object getItem(int position)
{
// TODO Auto-generated method stub
return listview_arr[position];
}

public long getItemId(int position)
{
// TODO Auto-generated method stub
return listview_array.length;
}

public View getView(final int position, View convertView, ViewGroup parent)
{
View row=null;

LayoutInflater inflater=cntx.getLayoutInflater();
row=inflater.inflate(R.layout.search_list_item, null);

TextView tv=(TextView)row.findViewById(R.id.title);
CheckBox cb=(CheckBox)row.findViewById(R.id.cb01);


tv.setText(listview_arr[position]);

cb.setOnClickListener(new OnClickListener(){

public void onClick(View v) {

if(cb.ischecked)
{
   //ur code
}

else //ur code

}

});

return row;
}
}

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!