如何让EditText重新获得焦点?

问题描述:

我有一个EditText和一个按钮的活动。当按下按钮时,我打电话如何让EditText重新获得焦点?

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

我有另一个按钮,当按下时,它会更改活动。

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

当我从活性2返回到具有EditText上我的主要活动,我希望它重新获得焦点。也就是说,我希望能够在其中输入一些新的值。任何想法如何可能?

我试图做这在我的主要活动

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

这似乎并没有工作。

正如您所说,您希望EditText在您从第二个活动返回时重新获得焦点。
那么很可能这是你应该尝试什么:既然你已经与startActivityForResult方法调用活性2(requestCode:0),你可以利用它的优势:

应覆盖

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; 
    } 
} 
+0

@rekaszeru,我仍然无法编辑文本。无论我之前输入的内容是否可见,我都无法输入任何内容。 – 2011-04-22 18:40:48

+0

确保你的myEditText在本地初始化,它不应该是一个全局变量 – rekaszeru 2011-04-22 18:53:59

+0

我能够在activity2返回后在我的主要活动中做到这一点b =(Button)findViewById(R.id.code); b.setClickable(true);我仍然无法使用 EditText myEditText =(EditText)findViewById(R.id.textBox); myEditText.setClickable(true); myEditText.setFocusable(true); myEditText.requestFocus(); 效果很好。 – 2011-04-22 18:55:44

我没有通过Android源实际上加强检查这一点,但SYMP汤姆斯暗示对我说:

  • #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()); 
    } 
});