Android 如何使EditText重新获得焦点?

Android 如何使EditText重新获得焦点?,android,android-activity,setfocus,android-edittext,clickable,Android,Android Activity,Setfocus,Android Edittext,Clickable,我有一个带有编辑文本和按钮的活动。按下按钮时,我打电话 myEditText.setClickable(false); myEditText.setFocusable(false); 我有另一个按钮,按下时,会改变活动 Intent myIntent = new Intent(view.getContext(), DestinationScreen.class); startActivityForResult(myIntent, 0); 当我从activity2返回到包含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()
因此,您可以通过从主线程上的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());
    }
});

@rekaszeru,我仍然无法编辑文本。我之前输入的内容仍然可见,我无法键入任何内容。请确保您的myEditText在本地初始化,它不应该是全局变量。从activity2返回后,我可以在我的主activity中执行此操作b=(按钮)findViewById(R.id.code);b、 可点击设置(真);我仍然无法使用EditText myEditText=(EditText)findViewById(R.id.textBox);myEditText.setClickable(真);myEditText.setFocusable(true);myEditText.requestFocus();效果很好,有什么帮助吗?我还是拿不到。你有什么例外吗?主活动的onActivityResult方法是否被调用?