这是我发现的最奇怪的错误,我无法修复它。我正在使用一个名为 android-binding 的外部库来实现我的应用程序。我联系了这个库的一位开发人员,他调试了我的项目,他认为这个错误与他的库无关。
我有一个 ListView 显示某个月份的任务。该视图有一个按钮用于加载上个月的任务(从现在开始,LoadPrevious)和一个用于从下个月加载任务的页脚(从现在开始,LoadNext)。这个外部库允许您在布局视图上设置属性绑定:onclick,因此当用户单击视图时,它会自动调用放置在代码中的命令。
如果我单击 LoadNext,该功能第一次可以正常工作。从这里开始,每次我单击 LoadNext 时它什么都不做,也不会调用该函数。如果然后我点击 LoadPrevious,我在 LoadNext 上所做的所有点击都会执行,就像点击堆叠或类似的东西一样。
但它变得更加奇怪。如果我单击列表中的一个项目(onClick 函数不需要做任何事情,只需单击该项目)然后 LoadNext 工作正常。我试图模拟来自代码的点击(ListView->performItemClick、setSelection、setChecked),但它仍然无法正常工作。
有谁知道是否有原因导致点击 Views 可能会被堆叠或类似的东西?
编辑:项目代码并不简单。我将在这里放置与失败功能相关的代码,跳过此活动的所有其他功能,尽管我认为其中一些其他功能可能与错误有关。
这是不起作用的命令的代码:
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() 函数。但是,如果我取消注释该行并从视图中删除选项卡(布局有两个选项卡,第二个有列表),它也可以工作。也就是说,如果我同时使用这两个东西(选项卡和 setCursor),它就不起作用,但如果我删除其中一个,它就起作用了。
但这还不止于此。我使用带有选项卡和 setCursor 的项目创建了一个简化版本,但列表中没有上下文菜单,布局中没有选项菜单,也没有在后台运行 SyncAdapter,它也可以工作。就像这个错误只发生在一组东西一起工作时,其中两个是 setCursor 和选项卡。就像我说的,我发现的最奇怪的错误。