package de.bsd.zwitscher;
import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.util.SparseBooleanArray;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import java.util.ArrayList;
import java.util.List;
/**
* Show a list with multiple items where the
* user can select some from
*
* @author Heiko W. Rupp
*/
public class MultiSelectListActivity extends ListActivity implements AdapterView.OnItemClickListener {
private String mode;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle bundle = getIntent().getExtras();
List<String> data = bundle.getStringArrayList("data");
boolean[] checked = bundle.getBooleanArray("checked");
mode = bundle.getString("mode");
final ListView listView = getListView();
if (mode.equals("single")) {
setListAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_single_choice, data));
listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
listView.setOnItemClickListener(this);
}
else {
Button okButton = new Button(this);
okButton.setText("ok");
okButton.setEnabled(true);
okButton.setVisibility(View.VISIBLE);
okButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SparseBooleanArray positions = getListView().getCheckedItemPositions();
List<Integer> positionsList = new ArrayList<Integer>(positions.size());
for (int i = 0; i < positions.size();i++) {
if (positions.get(i))
positionsList.add(i);
}
long[] items = new long[positionsList.size()];
for (int i = 0; i < positionsList.size(); i++) {
items[i]=positionsList.get(i);
}
Intent intent = prepareReturnedIntent();
intent.putExtra("data", items);
finish();
}
});
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
listView.addFooterView(okButton); // Needs to be called before setAdapter
setListAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_multiple_choice, data));
for (int i = 0; i < checked.length; i++) {
getListView().setItemChecked(i,checked[i]); // does not check
}
}
listView.setItemsCanFocus(false);
}
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
ListView listView = getListView();
String item = (String) listView.getItemAtPosition(position);
Intent intent = prepareReturnedIntent();
intent.putExtra("data", item);
finish();
}
private Intent prepareReturnedIntent() {
Intent intent = new Intent();
intent.putExtra("mode",mode);
setResult(RESULT_OK,intent);
return intent;
}
}