如何使EditText重新获得焦点



我有一个活动EditText和一个按钮。当按钮被按下时,我调用

myEditText.setClickable(false);
myEditText.setFocusable(false);

我有另一个按钮,当按下时,改变活动。

Intent myIntent = new Intent(view.getContext(), DestinationScreen.class);
startActivityForResult(myIntent, 0);

当我从activity2返回到具有EditText的主活动时,我希望它重新获得焦点。也就是说,我希望能够在里面输入一些新的值。知道这是怎么可能的吗?

我试图在我的主活动

startActivityForResult(myIntent, 0);
myEditText = (EditText) findViewById(R.id.textBox);
myEditText.setClickable(true);
myEditText.setFocusable(true);
myEditText.requestFocus();

正如您所说,您希望EditText在您从第二个活动返回时重新获得焦点。
那么可能这就是你应该尝试的:因为你已经用startActivityForResult方法(requestCode: 0)调用了activity2,你可以利用它:

你应该重写

onActivityResult(int requestCode, int resultCode, Intent data)

方法在你的主活动中,检查是否requestCode == 0,如果是,

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
    super.onActivityResult(requestCode, resultCode, data);
    switch (requestCode)
    {
        case 0:
            EditText myEditText = (EditText) findViewById(R.id.textBox);
            myEditText.setClickable(true);
            myEditText.setFocusable(true);
            myEditText.requestFocus();
        default:
            break;
    }
}

我还没有通过Android源代码来验证这一点,但这些症状对我来说意味着:

  • #onActivityResult()#onResume()之前被调用,
  • 请求焦点可能需要显示视图,这还不是真的(因为活动的视图层次结构没有附加到它的窗口,见View#isShown())。
因此,你可以通过从主线程上的可运行线程请求焦点来修复它,该线程将在活动恢复后立即运行。在你的onActivityResult()定义中:
final EditText myEditText = (EditText) findViewById(R.id.textBox);
runOnUiThread(new Runnable() {
    @Override
    public void run() {
        myEditText.requestFocus();
        // Also move the cursor to the end
        myEditText.setSelection(myEditText.length());
    }
});

相关内容

  • 没有找到相关文章

最新更新