0

我有一个 ExpandableListView,我在其中加载了组和子视图中的自定义布局。

他们有一些编辑文本字段。

当我单击编辑文本时,会出现软键盘,此时重新加载列表,但焦点不会在编辑文本上。

结果,我正在输入的输入未输入到该编辑文本中。

如果我再次单击编辑文本,我可以输入值。

但即使在重新加载列表视图后,我也想重新获得焦点。

我尝试在重新加载时存储最后一次单击的视图并将其存储在临时变量中requestFocus(),但它不起作用。

如何实现这一目标..?

这是一个屏幕截图。

图片

如果有人有想法请帮助我..!

提前致谢。

4

5 回答 5

3

我尝试存储最后一次单击的视图并将其存储在临时变量 requestFocus() 中重新加载,但它不起作用。

什么不工作?您的活动是否正在重新创建,因此临时变量正在丢失?如果是这样,那么这个答案可能会对您有所帮助。

我以前没有使用过 ExpandableListView,但我不得不在我的代码中解决类似的问题。当方向改变发生时,活动被破坏然后重新创建,所以我使用onRetainNonConfigurationInstance()用来存储我想要保留的信息。

这是一些示例代码:

  protected StoredState mStoredState;

  @Override
  public void onCreate(Bundle savedInstanceState)
  {
    super.onCreate(savedInstanceState);

    final Object data = getLastNonConfigurationInstance();

    if (data == null)
    {
      // First time initialization
      mStoredState = new StoredState();
    }
    else
    {
      // StoredState data exists
      mStoredState = (StoredState)data;

      if (mStoredState.mFieldToGiveFocusTo != -1)
      {
        // Give focus to the field that had focus before the
        // activity was recreated
        View viewToFocus = findViewById(mStoredState.mFieldToGiveFocusTo);
        viewToFocus.requestFocus();
      }
    }
  }

  @Override
  public Object onRetainNonConfigurationInstance()
  {
    return mStoredState;
  }

  /**
   * Class to store the information about this activity when the orientation
   * is changed
   */
  private static class StoredState
  {
    int mFieldToGiveFocusTo;

    private StoredState()
    {
      mFieldToGiveFocusTo = -1;
    }
  }

然后你只需要设置mStoredState.mFieldToGiveFocusTo用户第一次触摸 EditText 的时间。

于 2011-10-29T18:29:36.303 回答
1

requestFocus()我在调用inside onCreate()or时遇到了类似的问题onResume()。我能够通过稍微延迟设置焦点来解决这个问题。这样的事情可能对你有用:

new Handler().postDelayed(new Runnable() {

            @Override
            public void run() {
                viewToFocus.requestFocus();

            }
        }, 100);

我认为问题的根源可能是 AndroidFramework 在处理 onResume() 之后设置了焦点。所以这就是为什么延迟可能会有所帮助。

于 2011-10-31T14:05:24.323 回答
0

为您的活动管理 SoftInput 键盘。

看看android:windowSoftInputMode

于 2011-10-31T16:33:34.650 回答
0

我想你会在这里找到答案: ExpandableListView child items don't get focus when touches

这家伙有一个听起来和你一样的问题。

于 2011-10-25T15:15:58.213 回答
0

展开 listView 后,您可以通过添加此行获得对 editText 的强制增益焦点,

editText.requestFocus();

于 2011-10-27T18:18:52.207 回答