重新加载可扩展列表时如何重新关注编辑文本...?

时间:2011-10-21 10:19:27

标签: android android-widget android-edittext expandablelistview lost-focus

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

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

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

因此,我输入的输入未输入该编辑文本。

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

但是我想重新加载列表视图后重新获得焦点。

我尝试存储最后点击的视图并在重新加载时将其存储在临时变量requestFocus()中,但它无效。

如何实现这一目标?

这是一个截屏。

image

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

先谢谢。

5 个答案:

答案 0 :(得分: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;
    }
  }

然后,您只需在用户第一次触摸EditText时设置mStoredState.mFieldToGiveFocusTo

答案 1 :(得分:1)

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

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

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

            }
        }, 100);

我认为问题的根源可能是AndroidFramework在处理onResume()之后设置了Focus。这就是延迟可能有所帮助的原因。

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

扩展listView后,通过添加此行

获得editText上的强制获取焦点

editText.requestFocus();

答案 4 :(得分:0)

管理您的活动的SoftInput键盘。

查看android:windowSoftInputMode