2013-08-23 2 views
0

У меня есть edittext, для которого требуется ввести целое число. Таким образом, я установил его, чтобы принять только входной тип «number» в XML-файле. В моем коде я использовал onEditorAction, чтобы прослушать нажатие кнопки «Готово». Это требование, чтобы оценка была «записана». Но по какой-либо причине каждый раз, когда «Done» нажимается на клавиатуре с цифрами, появляется клавиатура qwerty по умолчанию и фокусируется. Я должен нажать кнопку «назад», чтобы избавиться от нее!Регулярная клавиатура продолжает появляться после нажатия «Готово» на цифровой клавиатуре

Почему это происходит? Вот весь код, который манипулирует EditText:

От .xml:

<EditText 
     android:id="@+id/partial_score_entry" 
     android:layout_width="100dp" 
     android:layout_height="match_parent" 
     android:layout_alignParentRight="true" 
     android:inputType="number" 
     android:hint="0" /> 

От пользовательского адаптера:

... 
public View getView(int pos, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 
     View v = convertView; 
     if (v == null) 
     { 
      LayoutInflater vi = (LayoutInflater) c.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      v = vi.inflate(R.layout.score_list_row_2, null); 
     } 

      TextView subtaskView = (TextView)v.findViewById(R.id.subtask2); 
      TextView maxPointsView = (TextView)v.findViewById(R.id.max_points2); 

      final ScoringInfo scr = data.get(pos); 
      subtaskView.setText(scr.subtask); 
      maxPointsView.setText("Max Points: " + Integer.toString(scr.maxPoints)); 

      final EditText manualScore = (EditText)v.findViewById(R.id.partial_score_entry); 
      manualScore.setTag(R.string.score, scr.maxPoints); 
      manualScore.setTag(R.string.subtask_num, scr.subtaskNum); 
      manualScore.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        try { 
         previous = Integer.parseInt(manualScore.getText().toString()); 
        } catch (Exception e) { 
         e.printStackTrace(); 
        } 
       } 

      }); 
      manualScore.setOnEditorActionListener(new OnEditorActionListener() { 

       @Override 
       public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {     

        if (actionId == EditorInfo.IME_ACTION_DONE) { 
         scr.addToTotalPoints(-previous); 

         int max = Integer.parseInt(manualScore.getTag(R.string.score).toString()); 
         int subNum = Integer.parseInt(manualScore.getTag(R.string.subtask_num).toString()); 
         Challenge.subtaskScores.remove(subNum); 
         int tmpScore = 0; 

         if (!manualScore.getText().toString().equals("")) { 
          try { 
           tmpScore = Integer.parseInt(manualScore.getText().toString()); 
          } catch (Exception e) { 
           e.printStackTrace(); 
           Toast.makeText(c, "Error: Maximum point allowance surpassed.", Toast.LENGTH_SHORT).show(); 
          } 
          if (tmpScore > max){ 
           Toast.makeText(c, "Error: Maximum point allowance surpassed.", Toast.LENGTH_SHORT).show(); 
           manualScore.setText(""); 
          } 
          else { 
           Challenge.subtaskScores.put(subNum, tmpScore); 
           scr.addToTotalPoints(tmpScore); 
           updatePoints(scr.getTotalPoints()); 
          } 
         } 

          manualScore.clearFocus(); 

          return true; 
        } 
        return false; 
       } 
      }); 

      manualScore.setOnFocusChangeListener(new View.OnFocusChangeListener() 
      { 
       @Override 
       public void onFocusChange(View v, boolean hasFocus) 
       { 
        if(hasFocus) 
        { 
         if(!manualScore.getText().toString().equals("")) 
          previous = Integer.parseInt(manualScore.getText().toString()); 
        } 
       } 
      }); 

     return v; 
    } 

EDIT: Я установил выданная, добавив следующий код в onEditorAction метод в пределах блока if if:

InputMethodManager imm = (InputMethodManager)c.getSystemService(Context.INPUT_METHOD_SERVICE); 
         imm.hideSoftInputFromWindow(manualScore.getWindowToken(), 0); 

ответ

1

O n ваш OnClickListener делает это

InputMethodManager imm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE); 
imm.hideSoftInputFromWindow(getWindowToken(), 0); 
+0

В нем говорится, что INPUT_METHOD_SERVICE нельзя разрешить переменной. –

+0

Хорошо, я попробовал это, используя оба контекста. и контекст, который я определил в этом пользовательском классе адаптера (c): InputMethodManager imm = (InputMethodManager) c.getSystemService (c.INPUT_METHOD_SERVICE); Это все еще не имеет значения. –

+0

Извините за 3 комментария подряд, но я понял это. Я отредактирую в решении моего OP. Спасибо. Ваш код привел меня в правильном направлении, и я, наконец, понял, как это сделать. –

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