0

I am trying to get values from spinner which are generated dynamically using getter and setter and custom adapter. I am able to display it, but i want to add onclicklistners to each of spinner generated and add get the selected value from it and store it in array list.

so far here's my code getter setter

public class Baggage_details {

String status;
String sector_name;
String title_count;
ArrayList<String> baggage_list;


public String getstatus() {
    System.out.println("----- : "+status);
    return status;}
public void setstatus(String status) {this.status = status;}


public String getsector_name() {
    System.out.println("----- : "+sector_name);
    return sector_name;}
public void setsector_name(String sector_name) {this.sector_name = sector_name;}


public String gettitle_count() {
    System.out.println("----- : "+title_count);
    return title_count;
}
public void settitle_count(String title_count) {this.title_count = title_count;}



public ArrayList getbaggage_list() {

    return baggage_list;
}
public void setbaggage_list(ArrayList<String> baggage_list) {this.baggage_list = baggage_list;}



public Baggage_details(String status,String sector_name,String title_count,ArrayList<String> baggage_list)
{

    this.status = status;
    this.sector_name = sector_name;
    this.title_count=title_count;
    this.baggage_list=baggage_list;

}


 }

custom Adaptor

public class Baggage_Adapter extends BaseAdapter {
Context context;
public static ArrayList<Baggage_details> rowItems;

public static ArrayList<String> selected_baggage=new ArrayList<String>();
public static ArrayList<String> selected_baggage_final=new ArrayList<String>();

Baggage_Adapter(Context context, ArrayList<Baggage_details> rowItems) {
    selected_baggage.clear();
    selected_baggage_final.clear();
    this.context = context;
    this.rowItems = rowItems;


}



@Override
public int getCount() {
    return rowItems.size();
}

@Override
public Object getItem(int position) {
    return rowItems.get(position);
}

@Override
public long getItemId(int position) {
    return rowItems.indexOf(getItem(position));
}

private class ViewHolder {
    TextView sector,status;
    TextView title_count;
    Spinner spinner;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {


    final ViewHolder holder;
    LayoutInflater mInflater = (LayoutInflater) context
            .getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
    if (convertView == null) {
        convertView = mInflater.inflate(R.layout.baggage_adapter, null);
        holder = new ViewHolder();
    }
    else
    {
        holder = (ViewHolder) convertView.getTag();
    }


    holder.status = (TextView) convertView.findViewById(R.id.status);
    holder.sector = (TextView) convertView.findViewById(R.id.sector);
    holder.title_count = (TextView) convertView.findViewById(R.id.title_count);
    holder.spinner = (Spinner) convertView.findViewById(R.id.spinner);

    try
    {

        final Baggage_details row_pos = rowItems.get(position);

        String status = String.valueOf(row_pos.getstatus());
        String title_count = String.valueOf(row_pos.gettitle_count());
        String sector=String.valueOf(row_pos.getsector_name());

        holder.status.setText(status);
        holder.sector.setText(sector);
        holder.title_count.setText(title_count);

        ArrayAdapter<String> adapter1;
        adapter1 = new ArrayAdapter<String>(context,android.R.layout.simple_spinner_item,row_pos.getbaggage_list());
        adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        holder.spinner.setAdapter(adapter1);
    }

    catch (Exception e)
    {
        Log.e("PASS_ADAP ERROR:", e.getMessage());
    }

    convertView.setTag(holder);



    holder.spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            String Text = parent.getSelectedItem().toString();
            String key =  holder.title_count.getText().toString()+"!"+holder.sector.getText().toString();

            if(Text.equals("Select") )
            {
                selected_baggage.add(key);
                selected_baggage_final.add(Text);
            }
            else{

                for (int i = 0; i <selected_baggage.size() ; i++)
                {
                    if(selected_baggage.get(i).equals(key))
                    {
                        selected_baggage.set(i,key);
                        selected_baggage_final.set(i,Text);
                    }
                }

            }
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }
    });

    return convertView;
 }
 }

Here's how i am calling it

 ArrayList<String> omword = new ArrayList<String>();

    omword.add("No Baggage");
    omword.add("123");
    omword.add("456");
 for (int i = 0; i < 2; i++)
    {
        bagdetails.add(new Baggage_details("going","BNG","key-"+(i+1),omword));
        baggageAdapter=new Baggage_Adapter(getContext(),bagdetails);
    }
Zezariya Nilesh
  • 390
  • 2
  • 14
New learner
  • 202
  • 1
  • 2
  • 14
  • are you able to get item or not? – Abhinav Gupta Mar 22 '18 at 07:35
  • Thank you @AbhinavGupta yes I am getting item ,but not able to handle it store it properly.means if i generate 5 Spinners then selected item should be 5 only but using above code i am not able to handle it. – New learner Mar 22 '18 at 07:38
  • If you generate five spinners then you should add five on item changed listeners. It is pretty unclear what you want ant what your problem is. – greenapps Mar 22 '18 at 07:39
  • hey @greenapps what i want to achieve is using single onitemselected listener i want to access all spinner generated values. – New learner Mar 22 '18 at 07:43
  • Do yo have five spinners? Then every spinner needs a listener. You did not confirm that there are five spinners. You stay unclear. – greenapps Mar 22 '18 at 07:44
  • Sorry for that @greenapps but i am generating spinners dynamically right then how can i be specific. – New learner Mar 22 '18 at 07:47
  • So you do not know how many spinners are going to be generated at run time? Well ok. But lets say more then one. Two, three, four, five or six to know exactly how much is irrelevant. But what stays is that you give each spinner its own listener. Please be clear! – greenapps Mar 22 '18 at 07:50
  • I accept that @greenapps.is it possible to that using single listener for all spinner generated. or any other method to get all spinners selected item into list.? – New learner Mar 22 '18 at 07:52
  • Every spinner needs its own listener. How often should that be said yet? – greenapps Mar 22 '18 at 07:54
  • You did not post code that creates a spinner at runtime. You should have started with that of course. Pretty unclear what you are doing. – greenapps Mar 22 '18 at 07:55
  • It looks more to me that you have only one spinner but that you create some items for that spinner at run time. And that you want to give every item it's own listener instead of one listener for the spinner for all items. – greenapps Mar 22 '18 at 07:58

1 Answers1

0

You are selecting item using spinner so you have to do in adapter holder.spinner.getSelectedItem().toString();

Now Change this :-

 holder.spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            String Text = holder.spinner.getSelectedItem().toString();
            String key =  holder.title_count.getText().toString()+"!"+holder.sector.getText().toString();

            if(Text.equals("Select") )
            {
                selected_baggage.add(key);
                selected_baggage_final.add(Text);
            }
            else{

                for (int i = 0; i <selected_baggage.size() ; i++)
                {
                    if(selected_baggage.get(i).equals(key))
                    {
                        selected_baggage.set(i,key);
                        selected_baggage_final.set(i,Text);
                    }
                }

            }
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }
    });
Abhinav Gupta
  • 2,225
  • 1
  • 14
  • 30