我有一个可扩展的列表视图的自定义adpater。可扩展列表视图的每个子项都有多个项目,我想为每个项目设置一个单击侦听器。
当我设置clicklistener时,总是需要两次单击才能让项目执行任务。第一次单击选择整行,然后第二次单击执行它需要执行的操作。我该如何防止这种情况?这是代码:
myList.setOnChildClickListener(new OnChildClickListener(){
@Override
public boolean onChildClick(ExpandableListView parent,
View v, int groupPosition, int childPosition,
long id) {
final int grp = groupPosition;
final int chdp = childPosition;
TextView txt = (TextView) v.findViewWithTag("title");
txt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
child = myFolderlist.getArray().get(grp)
.get(chdp);
goToItem(child, none, all, false);
}
});
我已尝试在适配器中设置clicklistener,但无法从适配器访问我要运行的代码。我还在布局中设置了onclick,但这使我无法获得groupPosition和childPosition,因为它完全忽略了clicklistener。
感谢您的帮助。
答案 0 :(得分:0)
在ListView的onClick方法中为TextView设置OnClickListener时,第一次单击将设置TextView - OnClickListener,第二次单击将调用该侦听器。
一种可能的解决方案是在设置TextView的OnClickListener后调用txt.performClick
答案 1 :(得分:0)
我假设您只想在单击TextView时完成点击?
@Override
public boolean onChildClick(ExpandableListView parent,
View v, int groupPosition, int childPosition,
long id) {
final int grp = groupPosition;
final int chdp = childPosition;
TextView txt = (TextView) v.findViewWithTag("title");
txt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
child = myFolderlist.getArray().get(grp)
.get(chdp);
goToItem(child, none, all, false);
}
});
txt.performClick();
}
否则整个孩子应该初始化工作:
@Override
public boolean onChildClick(ExpandableListView parent,
View v, int groupPosition, int childPosition,
long id) {
final int grp = groupPosition;
final int chdp = childPosition;
child = myFolderlist.getArray().get(grp)
.get(chdp);
goToItem(child, none, all, false);
}