我有一个活动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()
)。
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());
}
});