0

i have a strange problem .i am using a spinner on selection of its items i am opening a popup window but problem is that first time when any item is selected popup window opens but if that item is again selected popup does'nt open until any other item is selected before that item is selected again?? what should i do ?? plss help below is my code

      @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position,
            long id) {
        // TODO Auto-generated method stub
        switch (position) {
        case 0:

            break;
        case 1:
            pool_type_value=0;
            option_selected=2;
            calculation();
            break;

        case 2:
            pool_type_value=1;
            option_selected=2;
            System.out.println("pop up case 2");
            openPopupWindow(pool_legend);


            break;

        case 3:
            pool_type_value=2;
            option_selected=2;
            openPopupWindow(pool_legend);


            break;
        case 4:
            pool_type_value=0;
            option_selected=1;
            calculation();
            break;


        default:
            break;
        }

    }

          private void openPopupWindow(Spinner spinner) {
        // TODO Auto-generated method stub
        int h = 0;
        View popupView = null;
         Button btnDismiss = null;
        LayoutInflater layoutInflater 
         = (LayoutInflater)getBaseContext()
          .getSystemService(LAYOUT_INFLATER_SERVICE); 
         System.out.println("pop up ");
        if(width>240 && height>320)
          {
            h=350;

          }
        else if(width<=240 && height<=320){
            h=200;
        }
        if(pool_type_value==1){
         popupView = layoutInflater.inflate(R.layout.popup_rectangle_extension, null);
         btnDismiss = (Button)popupView.findViewById(R.id.dismiss);
         ed_width_single_extension=(EditText)popupView.findViewById(R.id.editText_singleextension_width);
         ed_length_single_extension=(EditText)popupView.findViewById(R.id.editText_singleextension_lenght);

         System.out.println("pop up 1");
         if(!hashmap.get("single_width").equals("0")){
             ed_width_single_extension.setText(""+hashmap.get("single_width"));
             }
            if(!hashmap.get("single_length").equals("0")){
             ed_length_single_extension.setText(""+hashmap.get("single_length"));
             }

        }else if(pool_type_value==2){
         popupView = layoutInflater.inflate(R.layout.popup_rectangle_plus_extension, null);
         System.out.println("pop up 2");
         btnDismiss = (Button)popupView.findViewById(R.id.dismiss);
        }
                 popupWindow = new PopupWindow(popupView, LayoutParams.FILL_PARENT,h);
                 popupWindow.setTouchable(true);
                 popupWindow.setFocusable(true);

                 btnDismiss.setOnClickListener(new Button.OnClickListener(){

                    @Override
                    public void onClick(View v) {
                        // TODO Auto-generated method stub
                        hashmap.put("single_width", ed_width_single_extension.getText().toString());
                        hashmap.put("single_length", ed_length_single_extension.getText().toString());
                        calculation();

                        popupWindow.dismiss();
                        // setDatabase();
                    }



});



                popupWindow.showAtLocation( spinner, Gravity.CENTER, 0, 10);


    }
Rahulkapil
  • 294
  • 4
  • 13
  • This is the issue with spinner. If any item is selected, again clicking on the same item, itemSelectedListner is not called. Tha'ts why you are facing this issue. – Android Jul 31 '12 at 12:47
  • Spinner is designed that way that you you can not reselect the same selected item. for assistant you can check this http://stackoverflow.com/questions/2562248/android-how-to-keep-onitemselected-from-firing-off-on-a-newly-instantiated-spin – Android Jul 31 '12 at 12:50
  • Programmatically set the selected value to something else when a value have been chosen. At least I think that should work. – Anders Metnik Jul 31 '12 at 12:50
  • it will work but then that selected valued will b displayed not that actual value i selected. – Rahulkapil Jul 31 '12 at 12:52
  • try out the link i have provided, it may help you. It suggest you that The onItemSelected is fired only when the user explicitly selects an item from the list. – Android Jul 31 '12 at 12:59

2 Answers2

1

the link
https://stackoverflow.com/a/6450043/1514187
says When you clicks again the currently selected item, then it can not fire any event. So you can not catch setOnItemSelectedListener for spinner to respond. Taken from

Community
  • 1
  • 1
grv_9098
  • 465
  • 5
  • 16
0

Try this

public class NoDefaultSpinner extends Spinner {

    private int lastSelected = 0;
    private static Method s_pSelectionChangedMethod = null;


    static {        
        try {
            Class noparams[] = {};
            Class targetClass = AdapterView.class;

            s_pSelectionChangedMethod = targetClass.getDeclaredMethod("selectionChanged", noparams);            
            if (s_pSelectionChangedMethod != null) {
                s_pSelectionChangedMethod.setAccessible(true);              
            }

        } catch( Exception e ) {
            Log.e("Custom spinner, reflection bug:", e.getMessage());
            throw new RuntimeException(e);
        }
    }

    public NoDefaultSpinner(Context context) {
        super(context);
    }

    public NoDefaultSpinner(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public NoDefaultSpinner(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    public void testReflectionForSelectionChanged() {
        try {
            Class noparams[] = {};          
            s_pSelectionChangedMethod.invoke(this, noparams);
        } catch (Exception e) {
            Log.e("Custom spinner, reflection bug: ", e.getMessage());
            e.printStackTrace();                
        }
    } 




    @Override
    public void onClick(DialogInterface dialog, int which) {    
        super.onClick(dialog, which);
            if(lastSelected == which)
                testReflectionForSelectionChanged();

            lastSelected = which;
    }
}
Android
  • 3,828
  • 9
  • 46
  • 79