如何让EditText重新获得焦点?

时间:2011-04-22 18:26:22

标签: android android-activity setfocus android-edittext clickable

我有一个带有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();

它似乎不起作用。

2 个答案:

答案 0 :(得分:0)

正如您所说,当您从第二项活动返回时,您希望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;
    }
}

答案 1 :(得分:0)

我没有通过Android来源对此进行检查,但这些症状意味着我:

    #onActivityResult()和之前的某个时间调用
  • #onResume()
  • 请求焦点可能需要显示视图,但这还不正确(因为活动的视图层次结构未附加到其窗口,请参阅View#isShown())。< / LI>

因此,您可以通过从主线程上的runnable请求焦点来修复它,该线程将在恢复活动后立即运行。在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());
    }
});