Problem getting Checkbox items on the ListView
I used before setListAdapter with simple_multiple_choice to make listview with checkboxes.
And then I did to get size and chosed positions:
SparseBooleanArray checked = list.getCheckedItemPositions();
cont = list.getCheckedItemPositions().size();
if (checked.get(i))
{
...
But now I needed more control on the layout, so i'm doing the listview on the xml, something like:
<listview>
<checkboxes id=.../>
</listview>
using setAdapter to those ids.
The listview is correctlyt populated (as before), problem is, now the SparseBooleanArray don't work. Thar variable 'cont', gives me 0, and 'checked' is null.
To make sure that 'list' is ok:
int len = list.getCount();
It gives me a right value开发者_C百科.
What's the problem?
You need to Implement custom List Adapter.
public class YourAdapterName extends BaseAdapter{
private Context mContext;
private DataType mValuestoShow;//Use your DataType to pass values to adapter.
/**
* Constructor to be called to initialize adapter with values.
* @param context
* @param vector
*/
public YourAdapterName(Context context, DataType data){
mContext = context;
mValuestoShow = vector;
}
public int getCount() {
if(null != mValuestoShow){
return mValuestoShow.size();
}
return 0;
}
public Object getItem(int position) {
if(position < mValuestoShow.size())
return mValuestoShow.get(position);
else
return null;
}
public long getItemId(int position) {
return 0;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder ;
if(convertView == null){
LayoutInflater li =(LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = li.inflate(R.layout.your_layout, null);
holder = new ViewHolder();
holder.txt_name = (TextView) convertView.findViewById(R.id.name_txt);
holder.checkBox = (Checkbox) convertView.findViewById(R.id.checkbox);
convertView.setTag(holder);
}else{
holder = (ViewHolder) convertView.getTag();
}
holder.txt_name.setText(getItem(position).toString());
holder.checkBox // Do your task with checkbox.
return convertView;
}
class ViewHolder {
TextView txt_name;
Checkbox checkBox;
}
}
your_layout.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 = "wrap_content"
android:padding = "10dp" >
<TextView
android:id = "@+id/txt_type1"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content" />
<CheckBox
android:id = "@+id/checkbox"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:layout_alignParentRight="true" />
</RelativeLayout>
精彩评论