EditText.requestFocus() doesn't work with onKeyListener

453 Views Asked by At

I'm trying to set the focus on an EditText (inputOne) but my code is showing odd behaviour. When I press the button, inputOne gets focus and everything is nice. If I press "Enter" on the SoftKeyboard, firing the onKeyListener, inputTwo remains focussed. In both cases "inputOne.requestFocus" returns true. This is my Code:

public class EditSeriesActivity extends Activity {

private FlashcardSeries series;

private EditText inputOne;
private EditText inputTwo;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.editseries);
    Intent intent = getIntent();
    series = intent.getParcelableExtra("EXTRA_MASSAGE");
    TextView textView = (TextView) findViewById(R.id.nameseries);
    textView.setText(series.getName());
    inputOne = (EditText) findViewById(R.id.side1);
    inputTwo = (EditText) findViewById(R.id.side2);
    inputTwo.setOnKeyListener(new View.OnKeyListener()
    {


        public boolean onKey(View v, int keyCode, KeyEvent event)
        {
            if (event.getAction() == KeyEvent.ACTION_DOWN)
            {
                switch (keyCode)
                {
                    case KeyEvent.KEYCODE_DPAD_CENTER:
                    case KeyEvent.KEYCODE_ENTER:
                        addCardToSeries(v);
                        break;
                    default:
                        break;
                }
            }
            return false;
        }
    });

}

public void addCardToSeries(View view){
    series.addFlashcard(new Flashcard(inputOne.getText().toString(), inputTwo.getText().toString()), this);

    inputTwo.setText("");
    inputOne.setText("");
    inputOne.requestFocus();

}
}
1

There are 1 best solutions below

1
On

try this

inputOne.requestFocus();
InputMethodManager inpuMethod = (InputMethodManager) getSystemService(G.context.INPUT_METHOD_SERVICE);
inpuMethod.showSoftInput(inputOne, InputMethodManager.SHOW_IMPLICIT);