这是我发现的最奇怪的错误,我无法修复它。我正在使用一个名为android-binding的外部库来实现我的应用程序。我联系了这个库的一个开发人员,他调试了我的项目,他认为这个bug与他的库无关。
我有一个ListView显示某个月的任务。该视图有一个按钮,用于加载上个月(从现在开始,LoadPrevious)的任务和一个从下个月(从现在开始,LoadNext)加载任务的页脚。此外部库允许您设置属性绑定:onclick on layout视图,因此当用户单击视图时,它会自动调用放置在代码中的Command。
如果单击LoadNext,该功能第一次正常工作。从这里开始,每次我单击LoadNext它什么都不做,该函数不会被调用。如果那时我单击LoadPrevious,我在LoadNext上执行的所有点击都会被执行,就像点击堆叠或类似的那样。
但它变得更加奇怪。如果我单击列表中的某个项目(onClick函数不需要执行任何操作,只需单击该项目),则LoadNext可以正常工作。我试图模拟代码中的点击(ListView-> performItemClick,setSelection,setChecked),但它仍然无效。
是否有人知道是否有可能堆叠视图点击的原因?
编辑:项目代码并不简单。我将在这里放置与失败功能相关的代码,跳过此活动的所有其他功能,尽管我认为其他一些功能可能与错误有关。
这是Command无法正常工作的代码:
public final CursorCollection<TaskItem> TaskList = new CursorCollection<TaskItem>(TaskItem.class); // Binded to the ListView (like an Adapter). Related to the external library
public final Command LoadNext = new Command(){
@Override
public void Invoke(View arg0, Object... arg1){
monthListEnd++;
if(monthListEnd==12){
monthListEnd=0;
yearListEnd++;
}
listTitle=monthName[monthListStart]+" "+yearListStart+" to "+monthName[monthListEnd]+" "+yearListEnd;
fillList();
}
};
//Fills the ListView.
public void fillList(){
int daysLastMonth = numberOfDays[monthListEnd];
if(monthListEnd==1 && yearListEnd%4==0 && (yearListEnd%100 != 0 || yearListEnd%400 == 0)) daysLastMonth++;
Cursor c = model.getTasks(1, monthListStart, yearListStart, daysLastMonth, monthListEnd, yearListEnd);
if (c.getCount() == 0) ListEmpty.set(true);
else ListEmpty.set(false);
mContext.startManagingCursor(c);
TaskList.setCursor(c);
}
这是TaskItem类:
public class TaskItem extends RowModel{
public final StringField Id = new StringField("id");
public final StringField Id_local = new StringField("id_local");
public final StringField Name = new StringField("name");
public final DateField StartDate = new DateField("start_date");
public final DateField EndDate = new DateField("end_date");
public final StringField Status = new StringField("status");
}
我发现了一些有趣的东西。如果我评论“TaskList.setCursor(c);”这一行从fillList()函数可以工作。但是,如果我让该行取消注释并从我的视图中删除选项卡(布局有两个选项卡,第二个选项卡具有列表),它也可以工作。也就是说,如果我同时使用这两个东西(tabs和setCursor)它就不起作用,但是如果我删除其中一个它就可以工作。
但那并不止于此。我创建了一个带有tabs和setCursor的项目的简化版本,但是列表中没有上下文菜单,没有布局中的选项菜单,并且没有在背景上运行SyncAdapter,它也可以工作。就像这个错误只发生在一组事物一起工作时,其中两个是setCursor和标签。就像我说的,我发现的最奇怪的错误。