我有一个带有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();
它似乎不起作用。
答案 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());
}
});