1

我有一个带有 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();

它似乎不起作用。

4

2 回答 2

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;
    }
}
于 2011-04-22T18:31:05.153 回答
0

我还没有通过 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());
    }
});
于 2017-09-14T15:25:44.437 回答