android中的微调器项目选择的弹出窗口

时间:2012-07-31 12:44:27

标签: android popup

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

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


    }

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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;
    }
}