您好我正在尝试创建一个显示ExpandableListView的活动,如图所示。
单击该组时,它会展开并显示带有textview和editext的LinearLayout。
正确知道我遇到的问题是当点击EditText时它没有得到焦点而我必须点击两次以使其获得焦点并显示键盘,然后当我输入文本时我正在打字时最初看不到任何内容,然后当我隐藏键盘时,EditText会更新我输入的文字
我尝试将android:descendantFocusability =“afterDescendants”添加到expandableListVie布局,但行为是相同的。
任何想法?或任何其他方式我可以实现这种布局??
答案 0 :(得分:6)
将此添加到活动中的android:name之后的清单
android:windowSoftInputMode="adjustPan"
答案 1 :(得分:1)
我不确定如何解决聚焦问题,但我知道为什么你必须折叠并展开组以查看editText中的文本。除非您滚动或执行诸如展开和折叠列表视图之类的操作,否则列表视图不会刷新。因此,我能想到解决此问题的最佳方法是创建一个字符串列表,该列表将是listview中editTexts的值。然后为每个editTexts创建一个onKeyClick()侦听器,并执行以下操作:
editText1.setOnKeyListener(new EditText.OnKeyListener()
{
public boolean onKey(View editText, int keyCode, KeyEvent keyEvent)
{
// Get the position of the item somehow
int position = 4;
// Get value from List<String> for editTexts
String textValue = listOfValues.get(position);
textValue = ((EditText)editText).getValue();
adapter.notifyDataSetChanged();
return false;
}
});
这里发生的是,一旦按下某个键,您将获得editText的值,并将列表中字符串的值更改为新值。然后,您告诉适配器其中一个项的值已更改,需要刷新。虽然这不是解决问题的有效方法,但它是一种备份解决方案,以防您无法想到更好的方法。
答案 2 :(得分:1)
尝试使用函数
将Edittext中的值存储到String变量中String temp;
editText.addTextChangedListener(new TextWatcher() {
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
}
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
temp = s.toString();//editText.getText().toString();
childValues[groupPosition][childPosition][]= temp ;
Toast.makeText(context, ""+childValues[groupPosition][childPosition], Toast.LENGTH_SHORT).show();
}
});
并在getChild()
函数中始终检查特定settext()
的临时数据和edittext
值。
答案 3 :(得分:0)
你必须添加两件事。
1)expandableListView.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);
2)在清单(在您的活动中)android:windowSoftInputMode="adjustPan"