0

我有一个奇怪的问题。我在选择它的项目时使用微调器我正在打开一个弹出窗口但问题是第一次选择任何项目时弹出窗口打开但如果再次选择该项目弹出不会打开直到任何在再次选择该项目之前选择了其他项目?我应该怎么办 ??请帮助下面是我的代码

      @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);


    }
4

2 回答 2

1

链接
https://stackoverflow.com/a/6450043/1514187
说当您再次单击当前选定的项目时,它不会触发任何事件。因此,您无法捕获 setOnItemSelectedListener 以使微调器响应。摘自

于 2012-07-31T13:02:18.520 回答
0

尝试这个

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;
    }
}
于 2012-07-31T13:05:17.443 回答