我的情况是我有一个List<Object>
,我有详细的活动,我可以编辑/删除,我想知道我是否还有其他方式。
我从adapter
传递intent
我传递该对象的位置,而对象本身,在Activity2上我做的东西,当我按删除或编辑我发送一个intent
有这个动作,对象和数组的位置,你能告诉我另一种方法来做到这一点吗?
我认为是静态列表,但我不喜欢静态的东西,说实话......
没有数据库内容
答案 0 :(得分:3)
好方法是使用某些本地数据库,例如Realm或ROOM。
然后你不会通过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
。
当您开始第二项活动时,请使用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}
}
现在您获得了该项目,您可以将其删除并保持相同的活动。