点击ListView最后一项不起作用,除非我先点击一个项目。点击堆叠?

时间:2012-08-16 08:07:24

标签: android listview click footer

这是我发现的最奇怪的错误,我无法修复它。我正在使用一个名为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和标签。就像我说的,我发现的最奇怪的错误。

0 个答案:

没有答案