2012-03-15 3 views
3

У меня есть приложение для продажи. Когда пользователь нажимает на EditText, вы можете просмотреть всплывающий калькулятор. В моем случае, когда пользователь дважды нажимает на EditText onClickLister, он отображает только всплывающий калькулятор.Android EditText OnClickListener Issue

Это myEditText

final EditText txtQty = new EditText(this); 
      txtQty.setHeight(1); 
      if(productList.get(i).getQty() != 0.00){ 
       txtQty.setText(Double.toString(productList.get(i).getQty())); 
      } 
      txtQty.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,42)); 
      txtQty.setTextSize(9); 
      txtQty.setId(i); 
      txtQty.setHint("0"); 
      txtQty.setClickable(true); 
      txtQty.setSelected(true); 
      txtQty.setSelectAllOnFocus(true); 
      txtQty.setInputType(InputType.TYPE_NULL); 
      tr.addView(txtQty); 

Это мой код:.

txtQty.setOnClickListener(new OnClickListener() { 
       public void onClick(View v) { 
        String productCode= txtCode.getText().toString(); 
        double price = getProductPrice(productCode).getPrice(); 
        txtPrice.setText(""+price); 

        if(invPriceEdit.equals("3")){ 
         if(editPrice.getText().toString().equals("") || editPrice.getText().toString().equals("0.00") || editPrice.getText().toString().equals("0") || editPrice.getText().toString().equals("0.0")){ 
          txtPrice.setText(""+ price); 
          editPrice.setText("" +price); 
         }else{ 
          String ePrice = editPrice.getText().toString(); 
          editPrice.setText("" +ePrice); 
         } 
        } 


         keyAmount = new StringBuffer(); 
         if(keyAmount.length() > 0){ 
          keyAmount.delete(0, keyAmount.length()); 
         } 

         int[] origin = new int[2]; 
         v.getLocationOnScreen(origin); 
         final int xVal = origin[0]; 
         final int yVal = origin[1] ; 

         dialog = new Dialog(SalesActivityGroup.group.getParent()); 
         dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 

         View vLoad = LayoutInflater.from(SalesActivityGroup.group.getParent()).inflate(R.layout.key_pad, null); 
         dialog.setContentView(vLoad); 
         android.view.WindowManager.LayoutParams lp= dialog.getWindow().getAttributes(); 

         dialog.setCancelable(true); 
         dialog.setCanceledOnTouchOutside(true); 
         lp.x = xVal; 
         lp.y = yVal; 
         lp.width = LayoutParams.WRAP_CONTENT; 
         lp.height = LayoutParams.WRAP_CONTENT; 
         lp.gravity = Gravity.TOP | Gravity.LEFT; 
         lp.dimAmount = 0;    
         dialog.getWindow().setAttributes(lp); 
         dialog.setCancelable(false); 
         keyamDisplay = (TextView)dialog.findViewById(R.id.keyamDisplay); 

         Button txtone = (Button)dialog.findViewById(R.id.txtone); 
         txtone.setOnClickListener(new OnClickListener() { 
          public void onClick(View v) { 
           keyAmount.append("1"); 
           keyamDisplay.setText("" + keyAmount.toString()); 

          } 
         }); 

         Button txttwo = (Button)dialog.findViewById(R.id.txttwo); 
         txttwo.setOnClickListener(new OnClickListener() { 
          public void onClick(View v) { 
           keyAmount.append("2"); 
           keyamDisplay.setText("" + keyAmount.toString()); 

          } 
         }); 

         Button txtthree = (Button)dialog.findViewById(R.id.txtthree); 
         txtthree.setOnClickListener(new OnClickListener() { 
          public void onClick(View v) { 
           keyAmount.append("3"); 
           keyamDisplay.setText("" + keyAmount.toString()); 
          } 
         }); 

         Button txtfour = (Button)dialog.findViewById(R.id.txtfour); 
         txtfour.setOnClickListener(new OnClickListener() { 
          public void onClick(View v) { 
           keyAmount.append("4"); 
           keyamDisplay.setText("" + keyAmount.toString()); 
          } 
         }); 

         Button txtfive = (Button)dialog.findViewById(R.id.txtfive); 
         txtfive.setOnClickListener(new OnClickListener() { 
          public void onClick(View v) { 
           keyAmount.append("5"); 
           keyamDisplay.setText("" + keyAmount.toString()); 
          } 
         }); 

         Button txtsix = (Button)dialog.findViewById(R.id.txtsix); 
         txtsix.setOnClickListener(new OnClickListener() { 
          public void onClick(View v) { 
           keyAmount.append("6"); 
           keyamDisplay.setText("" + keyAmount.toString()); 
          } 
         }); 

         Button txtseven = (Button)dialog.findViewById(R.id.txtseven); 
         txtseven.setOnClickListener(new OnClickListener() { 
          public void onClick(View v) { 
           keyAmount.append("7"); 
           keyamDisplay.setText("" + keyAmount.toString()); 
          } 
         }); 

         Button txteight = (Button)dialog.findViewById(R.id.txteight); 
         txteight.setOnClickListener(new OnClickListener() { 
          public void onClick(View v) { 
           keyAmount.append("8"); 
           keyamDisplay.setText("" + keyAmount.toString()); 
          } 
         }); 

         Button txtnine = (Button)dialog.findViewById(R.id.txtnine); 
         txtnine.setOnClickListener(new OnClickListener() { 
          public void onClick(View v) { 
           keyAmount.append("9"); 
           keyamDisplay.setText("" + keyAmount.toString()); 
          } 
         }); 

         Button txtZero = (Button)dialog.findViewById(R.id.txtZero); 
         txtZero.setOnClickListener(new OnClickListener() { 
          public void onClick(View v) { 
           keyAmount.append("0"); 
           keyamDisplay.setText("" + keyAmount.toString()); 
          } 
         }); 

         Button txtdot = (Button)dialog.findViewById(R.id.txtdot); 
         txtdot.setEnabled(false); 
         txtdot.setOnClickListener(new OnClickListener() { 
           public void onClick(View v) { 
            keyAmount.append("."); 
            keyamDisplay.setText("" + keyAmount.toString()); 
           } 
         }); 

         Button diaDelete = (Button)dialog.findViewById(R.id.diaDelete); 
         diaDelete.setOnClickListener(new OnClickListener() { 
          public void onClick(View v) { 
          if(keyAmount.length() > 0){ 
           keyAmount.delete(keyAmount.length()-1, keyAmount.length()); 
          } 
           keyamDisplay.setText("" + keyAmount.toString()); 
          } 
         }); 

         ImageButton imageSmileExit = (ImageButton)dialog.findViewById(R.id.imageSmileExit); 
         imageSmileExit.setOnClickListener(new OnClickListener() { 
          public void onClick(View v) { 
           dialog.dismiss(); 
          } 
         }); 

         Button txtDialogOK = (Button)dialog.findViewById(R.id.txtDialogOK); 
         txtDialogOK.setOnClickListener(new OnClickListener() { 
          public void onClick(View v) { 
           dialog.dismiss(); 
         } 

         }); 
        dialog.show(); 
        getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 
       } 
       } 

Это вопрос для продажи Rep Они хотят сделать двойной щелчок на каждый продукт clcik.

Я хочу отображать всплывающие калькуляторы, когда пользователь выбирает textEditor. (Не требуется двойной щелчок).

Это мой код:

 final EditText txtQty = new EditText(this); 
      txtQty.setHeight(1); 
      if(productList.get(i).getQty() != 0.00){ 
       txtQty.setText(Double.toString(productList.get(i).getQty())); 
      } 
      txtQty.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,42)); 
      txtQty.setTextSize(9); 
      txtQty.setId(i); 
      txtQty.setHint("0"); 
      txtQty.setInputType(InputType.TYPE_NULL); 
      tr.addView(txtQty); 

Проблема:

`TableLayout содержит список информации о продукте , когда пользователь нажимает на Qty это всплывающее калькулятор после ввода значения, он будет clearFocus на что ряд EditText кол-во & это перейти к первой строке EditText»

это фотография моего экрана

picture of my screen

+0

, где находится картина? можете ли вы, пожалуйста, переписать свою проблему еще раз, некоторые части не очень понятны. – Mayank

ответ

3

я сделал с помощью setOnTouchListener

disValEdit.setOnTouchListener(new OnTouchListener() { 
       public boolean onTouch(View v, MotionEvent event) { 
        if(event.getAction() == MotionEvent.ACTION_UP) { } }); 
+0

Спасибо за подсказку! Мне просто интересно, почему мы не должны использовать ACTION_DOWN, чтобы обрабатывать клики на EditText. Есть ли определенная причина для использования ACTION_UP? –

6

почему Вы добавляете onClickEvent на вашем EditText,

Для EditText это имеет смысл использовать onFocusChangeListener(), который будет срабатывать диалоговое окно, как только EditText получает фокус. В onFocusChangeListener() вы можете проверить, EditTextполучать фокус или потеря фокуса.

+0

Прежде чем написать свой код на 'onFocusChangeListener()'. Проблема заключалась в том, что пользователь по ошибке входил в 3, поэтому он хочет изменить до 5, что мы не можем повторить его в том же «EditText» – Piraba

+0

, что вы можете убедиться, что когда вы закроете свое диалоговое окно, вы удалите фокус с EditText(), то нажатие на него agin приведет к повторному отображению диалогового окна – Mayank

+0

Как удалить фокус из EditText(). Я попытался, когда когда всплывающее окно уволилось, вызвало это 'txtQty.setFocusable (false);'. Но не работает – Piraba

1

Вы можете попробовать добавить это в коде (в случае щелчка):

EditText yourEditText= (EditText) findViewById(R.id.yourEditText); 
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
imm.showSoftInput(yourEditText, InputMethodManager.SHOW_IMPLICIT); 

А что же может быть проблема, в том, что, может быть, где-то в файле XML, что он говорит: <requestFocus />. delete this

+0

Я создал EditText динамически. Я пробовал это также. Не работает – Piraba

0

Если я правильно понял ваш вопрос, вы намерены «Сделать sth», когда пользователь «дважды нажимает» на EditText.

Не уверен, что это лучшее решение, Здесь образец для этого. Мимический «двойной клик» на обратный отсчет 500 мс.

private EditText ed1; 
private CountDownTimer timer; 
private Boolean isWaiting = false; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    ed1 = (EditText) findViewById(R.id.editText1); 
    timer = new CountDownTimer(500, 500) { 


     @Override 
     public void onTick(long millisUntilFinished) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void onFinish() { 
      isWaiting = false; 

     } 
    }; 

    ed1.setOnClickListener(new OnClickListener() { 

     public void onClick(View v) { 

      if(isWaiting) { 
       isWaiting = false; 
       timer.cancel(); 
       // TODO: Pop Up Calculator 
       Toast.makeText(getApplicationContext(), "Pop", Toast.LENGTH_LONG).show(); 
      } else { 
       isWaiting = true; 
       timer.start(); 
      } 

     } 
    }); 
    } 
1

Попробуйте использовать

txtQty.setEditable(false); 
txtQty.setFocusable(false); 
2

Если его, как вы никогда не хотите, чтобы пользовательский ввод это значение с помощью клавиатуры и хотите, чтобы пользователь ввел значение из диалога.

Тогда зачем использовать EditText, вы можете иметь TextView придать ему правильный фон и шрифт текста.

А потом написать onClickListener для этого TextView

Смежные вопросы