如何让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;
}
}
答
我没有通过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());
}
});
@rekaszeru,我仍然无法编辑文本。无论我之前输入的内容是否可见,我都无法输入任何内容。 – 2011-04-22 18:40:48
确保你的myEditText在本地初始化,它不应该是一个全局变量 – rekaszeru 2011-04-22 18:53:59
我能够在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