I am trying to write a program to select multiple items in the listview i populate. but I am having difficulty of selecting multiple items. Please let me know how to do it. Bellow is how i have populate the Arraylist and i have a custom row with checkbox. i need to get the selected items (name, number) on the button click event. Thank you in advance. I have tried to understand the other posts, but since i was unable to relate them to my code, i am not sure of how to do.
public class Contactselect extends Activity {
ListView lv;
EditText et;
int count;
ArrayList<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>();
String phoneNumber;
String name;
String Name = "Contact";
String Phone = "Phonenumber";
TextWatcher search;
SimpleAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.contacts);
listcontacts();
lv = (ListView) findViewById(R.id.contactlist);
lv.setChoiceMode(lv.CHOICE_MODE_MULTIPLE);
lv.setTextFilterEnabled(true);
adapter = new SimpleAdapter(this, list, R.layout.row, new String[] {
Name, Phone }, new int[] { R.id.names, R.id.numbers });
lv.setAdapter(adapter);
Button b = (Button) findViewById(R.id.done);
b.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
String selected = "";
int cntChoice = lv.getCount();
SparseBooleanArray sparseBooleanArray = lv
.getCheckedItemPositions();
for (int i = 0; i < cntChoice; i++) {
if (sparseBooleanArray.get(i)) {
selected += lv.getItemAtPosition(i).toString() + "\n";
}
}
Toast.makeText(Contactselect.this, selected, Toast.LENGTH_LONG)
.show();
}
});
et = (EditText) findViewById(R.id.search);
et.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence cs, int arg1, int arg2,
int arg3) {
// TODO Auto-generated method stub
Contactselect.this.adapter.getFilter().filter(cs);
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1,
int arg2, int arg3) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable arg0) {
// TODO Auto-generated method stub
}
});
}
private ArrayList<HashMap<String, String>> listcontacts() {
// TODO Auto-generated method stub
FileInputStream fis = null;
try {
fis = openFileInput("contacts.xml");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
XmlPullParserFactory factory;
factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
XmlPullParser parser = factory.newPullParser();
parser.setInput(new InputStreamReader(fis));
int eventType = parser.getEventType();
int o = 0;
while (eventType != XmlPullParser.END_DOCUMENT) {
HashMap<String, String> map = new HashMap<String, String>();
// set flags for main tags.
if (eventType == XmlPullParser.START_DOCUMENT) {
} else if (eventType == XmlPullParser.START_TAG) {
String tag_name = parser.getName();
if (tag_name.contains("contacts")) {
// Log.i("tag",
// "name"
// + String.valueOf(parser
// .getAttributeValue(0))
// + "......................"
// + "number"
// + String.valueOf(parser
// .getAttributeValue(1)));
name = String.valueOf(parser.getAttributeValue(0));
phoneNumber = String.valueOf(parser
.getAttributeValue(1));
Log.i(name, phoneNumber);
map.put(Name, name);
map.put(Phone, phoneNumber);
list.add(map);
count++;
}
}
try {
eventType = parser.next();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Log.i("End document", "Ended" + count);
} catch (XmlPullParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}
}