当前位置: 首页 > 知识库问答 >
问题:

将ArrayAdapter与ArrayList一起使用

令狐俊风
2023-03-14

我目前正在构建一个Android议程活动,其中包括4个列表视图。基本上,我在AgendaDataReady(数组列表约会)上得到了由Web服务协调员调用的方法。此方法对约会进行排序,这样,将填充 4 个新的 ArrayList。代码如下:

@Override
public void onAgendaDataReady(ArrayList<Appointment> appointments) {
    //swipeContainer.setRefreshing(false);
    alert.hide();
    ArrayList<Appointment> appointmentsfuturs = new ArrayList<>();
    ArrayList<Appointment> appointmentspasses = new ArrayList<>();
    ArrayList<Appointment> appointmentsannules = new ArrayList<>();
    ArrayList<Appointment> appointmentsaconfimer = new ArrayList<>();

    for (Appointment a : appointments) {
        if (a.stateId == 2)
            appointmentsaconfimer.add(a);
        else if (a.stateId == 6)
            appointmentsannules.add(a);
        else if (a.stateId == 5)
            appointmentspasses.add(a);
        else if (a.stateId == 4)
            appointmentsfuturs.add(a);
    }

    ArrayAdapter<Appointment> adapterfuturs = new ArrayAdapter<>(AgendaActivity.this, android.R.layout.simple_list_item_1, appointmentsfuturs);
    ArrayAdapter<Appointment> adapterpasses = new ArrayAdapter<>(AgendaActivity.this, android.R.layout.simple_list_item_1, appointmentspasses);
    ArrayAdapter<Appointment> adapterannules = new ArrayAdapter<>(AgendaActivity.this, android.R.layout.simple_list_item_1, appointmentsannules);
    ArrayAdapter<Appointment> adapteraconfirmer = new ArrayAdapter<>(AgendaActivity.this, android.R.layout.simple_list_item_1, appointmentsaconfimer);

    rdvFutursListView.setAdapter(adapterfuturs);
    rdvPassesListView.setAdapter(adapterpasses);
    rdvAnnulesListView.setAdapter(adapterannules);
    rdvAConfirmerListView.setAdapter(adapteraconfirmer);

    adapterfuturs.notifyDataSetChanged();
    adapterpasses.notifyDataSetChanged();
    adapterannules.notifyDataSetChanged();
    adapteraconfirmer.notifyDataSetChanged();
}

这段代码工作正常,但是我不想再使用android了。R.layout.simple_list_item_1布局。所以我构建了一个自定义布局的ArrayAdapter。我的问题是这样的:如何将onAgendaDataReady()创建的ArrayList传递给我的适配器?

我试图这样做:

    appointmentItemAdapter = new AppointmentItemAdapter(this);
    rdvFutursListView.setAdapter(appointmentItemAdapter);
    appointmentItemAdapter.add(adapterfuturs);

但appointmentItemAdapter需要一个Appointment而不是ArrayList。

谢谢你的帮助

--------------- 最终解决方案-----------------

AppointmentItemAdapter appointmentFutursItemAdapter = new AppointmentItemAdapter(AgendaActivity.this);
rdvFutursListView.setAdapter(appointmentFutursItemAdapter);
appointmentFutursItemAdapter.addAll(appointmentsfuturs);
appointmentFutursItemAdapter.notifyDataSetChanged();

共有1个答案

赵镜
2023-03-14

我认为你在这里混合了不同的东西。

您的自定义适配器必须将 ArrayList(或任何集合)作为输入参数,并将当前项返回到列表(基于查询的位置)

因此,仅仅传递一个Appoint ment作为参数是不够的。

 类似资料:
  • 我试图实现,但没有成功。 现在我有了以下架构: 在类中,我有两个: 我希望在复选框中显示所有学科,并且希望当用户选择一个复选框时,将该复选框的对象学科添加到CourseDrimescies中-当取消选择一个复选框时,从CourseDiciplines中删除该学科。 我的JSF2.0代码如下: 这实际上显示了没有任何选中复选框的所有纪律,什么是正确的。但是当我选择一些复选框并提交表单时,我会尝试打印

  • 问题内容: 因此,我一直在为这个(应该是)简单的练习而绞尽脑汁,以使该程序将日期字符串转换为对象,对其进行格式化,并在完成后将其作为字符串再次返回。 这是程序的最后一点,它从文件中获取一小段文本,将其分解为单独的记录,然后将记录分解为单独的数据并将它们分配给个人对象。 我已经在多个位置检查了该代码,并且该代码完全执行了应该执行的操作,直到调用了format函数(该函数抛出)为止。为对象分配了应该分

  • 问题内容: 我想在目录中获取具有特定扩展名的文件列表。在中,我看到了可以做到这一点的方法。 由于我需要特定的扩展名,因此我创建了一个。但是,当我与此一起使用时,出现编译错误。我以为自以来,我应该能够做到这一点。代码如下: 最后一行显示编译错误: 类型的方法不适用于类型的参数 我正在尝试使用,不是。为何编译器无法识别这一点? 如果我编写自己的扩展筛选器,则此方法有效。我宁愿使用而不愿自己写。我究竟做

  • 问题内容: 我正在尝试在我的watchKit应用中使用firebase数据库。我已经在我的iPhone应用程序上开发了此功能,但是发现在我的Watch应用程序上很难做到这一点。当我尝试将firebase导入watch应用程序的VC类中时,它正在创建error 。 可以在Watch app中使用Firebase吗? 问题答案: 可悲的是,没有支持,并由于这样的事实,有没有支持在这些版本中,并高度依赖

  • 问题内容: 当请求来自Ajax.ActionLink(使用Http方法发布)时,是否可以在控制器操作上使用ValidateAntiForgeryToken属性。替代方法似乎是手动滚动JQuery Ajax请求,但我很好奇MVC Ajax框架中是否有办法。 问题答案: 我还没看过。您必须将令牌放入POST中记录的数据中。每次都使用相同的防伪令牌ID(或名称,我不记得了),但是您必须非常小心,并确保您

  • 问题内容: 最近,我开始与路由器一起使用来构建应用程序。 我通常将use 用于依赖项和代码管理。但是,当我尝试包含包含语法的文件时会出现问题。 这就是我目前所拥有的: 如何将IndexComponent放在其自己的文件中并在此文件中调用它?我尝试了通常的方法(与骨干和反应相同),但是由于语法错误。 问题答案: 所以我自己弄清楚了。 我从此仓库获得了必要的文件和说明:jsx- requirejs-p