【问题标题】:How to make EditText regain focus?如何让 EditText 重新获得焦点?
【发布时间】:2011-08-11 03:31:37
【问题描述】:

我有一个带有 EditText 和一个按钮的活动。按下按钮时,我调用

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

我有另一个按钮,按下它会改变活动。

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

当我从 activity2 返回到具有 EditText 的主要活动时,我希望它重新获得焦点。也就是说,我希望能够在其中输入一些新值。知道这怎么可能吗?

我尝试在我的主 Activity 中执行此操作

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

它似乎不起作用。

【问题讨论】:

    标签: android android-activity setfocus android-edittext clickable


    【解决方案1】:

    我还没有通过 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());
        }
    });
    

    【讨论】:

      【解决方案2】:

      如您所说,您希望 EditText 在您从第二个活动返回时重新获得焦点。
      那么可能这就是您应该尝试的:因为您已经使用startActivityForResult 方法(requestCode:0)调用了activity2,您可以利用它:

      你应该覆盖

      onActivityResult(int requestCode, int resultCode, Intent data)
      

      在你的main Activity里面的方法,检查是否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;
          }
      }
      

      【讨论】:

      • @rekaszeru ,我仍然无法编辑文本。我之前输入的内容仍然可见,我无法输入任何内容。
      • 确保你的 myEditText 在本地初始化,它不应该是一个全局变量
      • 从 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();效果不错。
      • 有什么帮助吗?我仍然无法得到它。
      • 你有什么异常吗?您的主要活动的 onActivityResult 方法是否被调用?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-10
      • 2021-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      相关资源
      最近更新 更多