I have a listView
containing some Spinner
s. I want to update the Spinner
s when I select an item. For example:
- Spinner 1 :
{A, B, C}
- Spinner 2 :
{1, 2, 3, 4, 5}
- Spinner 3 :
{a, b, c, d, e, f, g, h}
If I select A, I want to have:
- Spinner 1 :
{A, B, C}
- Spinner 2 :
{1, 2}
- Spinner 3 :
{d, e, f, g, h}
And if I select 1 :
- Spinner 1 :
{A, B, C}
- Spinner 2 :
{1, 2}
- Spinner 3 :
{d, e, f}
I guess I have to update the adapters, but I'm a bit confused about the getView()
method and how to update the adapters.
I know how to have the good list, my problem is that the data don't update when I want (it's not shown).
public class CustomSpinnerAdapter extends BaseAdapter {
private Context context;
private ArrayList<Critere> navDrawerItems;
private int pos;
public HashMap<String, String> criteres_modif;
private ArrayList<String> list;
private ArrayAdapter<String> dataAdapter;
private ArrayList<Spinner> spinnerList;
public CustomSpinnerAdapter(Context context,
ArrayList<Critere> navDrawerItems) {
this.context = context;
this.navDrawerItems = navDrawerItems;
criteres_modif = new HashMap<String, String>();
spinnerList = new ArrayList<Spinner>();
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return navDrawerItems.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return navDrawerItems.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
LayoutInflater mInflater = (LayoutInflater) context
.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
convertView = mInflater.inflate(R.layout.drawer_list_item, null);
TextView tv = (TextView) convertView.findViewById(R.id.drawerTitle);
if (tv != null) {
tv.setText(navDrawerItems.get(position).getLabel());
spinnerList.add((Spinner) convertView
.findViewById(R.id.drawerSpinner));
DatabaseHelper db = new DatabaseHelper(Catalogue.activity);
list = db.getCritereDistinct(navDrawerItems.get(position)
.getTableCritere(), criteres_modif);
dataAdapter = new ArrayAdapter<String>(Catalogue.activity,
R.layout.item_single_text, list);
spinnerList.get(position).setAdapter(dataAdapter);
pos = position;
spinnerList.get(position).setOnItemSelectedListener(
new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0,
View arg1, int arg2, long arg3) {
if (arg2 != 0) {
Log.w("Bad pos","pos : " + pos); // Always 0, it must be between 0 and 5 depending on the spinner selected
if (!criteres_modif
.containsKey(navDrawerItems
.get(pos).getTableCritere())) {
criteres_modif.put(
navDrawerItems.get(pos)
.getTableCritere(),
navDrawerItems.get(pos)
.getList().get(arg2));
Log.w("Key not exist", "Clé : "
+ navDrawerItems.get(pos)
.getTableCritere()
+ " Val : "
+ navDrawerItems.get(pos)
.getList().get(arg2));
} else {
criteres_modif.remove(navDrawerItems
.get(pos).getTableCritere());
criteres_modif.put(
navDrawerItems.get(pos)
.getTableCritere(),
navDrawerItems.get(pos)
.getList().get(arg2));
Log.w("Key exists", "Clé : "
+ navDrawerItems.get(pos)
.getTableCritere()
+ " Val : "
+ navDrawerItems.get(pos)
.getList().get(arg2));
}
updateNavSpinners(pos);
}
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});
}
}
return convertView;
}
public void updateNavSpinners(int position) {
DatabaseHelper db = new DatabaseHelper(Catalogue.activity);
for (int i = 0; i < navDrawerItems.size(); i++) {
if (position != i) {
navDrawerItems.get(i).setList(
db.getCritereDistinct(navDrawerItems.get(i)
.getTableCritere(), criteres_modif));
((BaseAdapter) spinnerList.get(i).getAdapter())
.notifyDataSetChanged();
}
}
}
}
EDIT : I updated my code. I'm getting the correct data at the beginning but when I click on an item it doesn't update the others spinners even if the data seems to be the one I need in the log. Moreover, I am getting problems to get the correct spinner selected. I have a variable called "pos" which is supposed to be the position of my spinner in my listView but its value is always 0.
Thank you in advance for any help you can give me.