如何使用CursorAdapter动态地将项添加到列表?

时间:2016-06-22 21:30:52

标签: android android-cursoradapter

很抱歉,如果这是一个愚蠢的问题,但我基本上是在试图弄清楚出于某种原因如何做到这一点。

我有一个使用ContentProvider从SQL数据库填充的联系人ArrayList(带有两个参数,名称和电话号码)。使用CursorAdapter填充ArrayList,然后在UI中显示。我希望用户能够将项目动态添加到联系人列表中。

在CursorAdapter中,bindView()newView()中定义了两个列表项类型。第一种类型包括两个EditTexts,一个用于名称,一个用于电话号码。第二种类型包括两个TextView,用于名称和电话号码。

基本上,这就是我想要发生的事情:

  1. 用户按下一个显示“添加联系人”的按钮,并将一个类型为EditText的新列表项动态添加到列表中。

  2. 用户填写联系信息,然后按下“保存联系人”按钮。按下此按钮时,EditText类型的列表项将转换为TextView类型的列表项,并添加到ArrayList并与其他联系人一起显示。

  3. 我很确定我至少知道如何做第二件事的一部分,就像这样:

    contactsName = nameEditText.getText().toString();
    contactsNumber = numberEditText.getText().toString();
    contacts.add(new ContactsObject(contactsName, contactsNumber));
    contactsAdapter.notifyDataSetChanged();
    

    然而,我遇到的麻烦是第一件事。如何在两种不同的视图类型之间进行转换?如何告诉适配器创建某种类型的列表项(EditText),然后将其转换为其他类型(TextView)?

1 个答案:

答案 0 :(得分:0)

在插入(或删除或更新)新数据后更新数据库时,您应该使用CursorLoader,在CursorAdapter子类对象上调用方法swapCursor(Cursor cursor)。当然,检查适配器是否为空。

这将替换适配器使用的游标对象并通知设置更改,重新绘制所有视图。