从活动2到活动1通信并更新列表

时间:2018-04-17 11:01:06

标签: java android list android-intent arraylist

我的情况是我有一个List<Object>,我有详细的活动,我可以编辑/删除,我想知道我是否还有其他方式。

我从adapter传递intent我传递该对象的位置,而对象本身,在Activity2上我做的东西,当我按删除或编辑我发送一个intent有这个动作,对象和数组的位置,你能告诉我另一种方法来做到这一点吗?

我认为是静态列表,但我不喜欢静态的东西,说实话......

没有数据库内容

3 个答案:

答案 0 :(得分:3)

好方法是使用某些本地数据库,例如RealmROOM。 然后你不会通过Intent传递整个对象。

Acitivity1中,您从本地数据库加载对象列表。当用户点击商品时,您会通过包裹将itemId传递给Activity2

然后在Activity2中,您可以按ID在本地数据库中找到项目,然后编辑您想要的内容,并将更改保存在数据库中。

返回Activity1后,您可以从数据库重新加载列表。

<强>更新

如果您不想使用本地数据库,请阅读MVVM模式+数据绑定。

在MVVM中,您有ViewModel来保存您的数据,例如List<Object>

感谢DataBinding,您可以将您的列表与适配器绑定。然后,在列表中进行的所有更改都将在UI中即时显示。

这就是Kotlin的样子:

使用适配器绑定对象列表:

@BindingAdapter("contractorItems")
fun setContractors(recyclerView: RecyclerView, items: List<Contractor>) {
    with(recyclerView.adapter as ContractorAdapter) {
        replaceData(items)
    }
}

使用RecyclerView绑定setContractors方法

<android.support.v7.widget.RecyclerView
    android:id="@+id/contractors_recyclerView"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:layout_marginEnd="16dp"
    android:layout_marginStart="16dp"
    app:contractorItems="@{viewmodel.contractors}"
    tools:listitem="@layout/contractor_signature_item" />

视图模型:

class ContractorsViewModel: ViewModel() {

    val contractors = ObservableArrayList<Contractor>()

}

答案 1 :(得分:0)

最好的方法是使用onActivityResult

Read documentations from here

当您开始第二项活动时,请使用startActivityForResult,当您完成任务后,您可以set result和新数据。

之后,当您完成第二个活动时,您的新意图包将返回到您的onActivityResult

收到数据后,您可以处理更新。

此处还有一个很好的例子:https://stackoverflow.com/a/10407371/3669559

答案 2 :(得分:0)

您可以在同一活动中执行此操作。如果我理解你,你想在点击它时从列表中删除它。

ListView.setOnItemClickListener{ new adapterView.onItemClickListerner(){ @Override public void onItemClick (AdapterView<?> parent ,View view,int position,Long id){ parent.getItemAtPostion(postion);//save this} } 现在您获得了该项目,您可以将其删除并保持相同的活动。