我有一个ExpandableListView,我在其中加载了组视图和子视图中的自定义布局。
他们有一些编辑文本字段。
当我点击编辑文本时,会出现软键盘,重新加载列表的时间,但焦点不会出现在编辑文本上。
因此,我输入的输入未输入该编辑文本。
如果我再次点击编辑文本,我可以输入值。
但是我想重新加载列表视图后重新获得焦点。
我尝试存储最后点击的视图并在重新加载时将其存储在临时变量requestFocus()
中,但它无效。
如何实现这一目标?
这是一个截屏。
如果有人有想法,请帮帮我..!
先谢谢。
答案 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键盘。