要以动态方式添加/删除数据,您应该使用Adapter 而不是使用您的方式添加它。正如谷歌建议的那样,RecycelerView 在 UI 和内存控制方面有更好的表现。我已经编写了一些可能适合您的简单代码。
对于Adapter,以及绑定方法。
public class MyOwnBindingUtil {
public static class Holder extends RecyclerView.ViewHolder {
private ItemBinding mItemBinding;
public Holder(ItemBinding itemView) {
super(itemView.getRoot());
mItemBinding = itemView;
}
}
public static class OwnAdapter extends RecyclerView.Adapter<Holder> {
private Map<String, String> mMap;
private List<String> keys;
private List<Double> values;
public OwnAdapter() {
keys = new ArrayList<>();
values = new ArrayList<>();
}
public void add(String key, Double value) {
keys.add(key);
values.add(value);
}
@Override
public Holder onCreateViewHolder(ViewGroup parent, int viewType) {
ItemBinding binding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), R.layout.item, parent, false);
return new MyOwnBindingUtil.Holder(binding);
}
@Override
public void onBindViewHolder(Holder holder, int position) {
holder.mItemBinding.setKey(keys.get(position));
holder.mItemBinding.setValue(String.valueOf(values.get(position)));
}
@Override
public int getItemCount() {
return keys.size();
}
}
@BindingAdapter("data:map")
public static void bindMap(RecyclerView pRecyclerView, Map<String, Double> pStringStringMap) {
pRecyclerView.setLayoutManager(new LinearLayoutManager(pRecyclerView.getContext()));
OwnAdapter lAdapter = new OwnAdapter();
for (Map.Entry<String, Double> lStringStringEntry : pStringStringMap.entrySet()) {
lAdapter.add(lStringStringEntry.getKey(), lStringStringEntry.getValue());
}
pRecyclerView.setAdapter(lAdapter);
}
}
如果您坚持使用 Map 而不是列表来获取数据,则会出现一些问题,因为 Map 没有索引,但 适配器会根据数据集的索引获取 Data .
https://www.mkyong.com/java8/java-8-convert-map-to-list/
How to convert a Map to List in Java?
How does one convert a HashMap to a List in Java?
在您的xml中,您可以将您的地图设置为recyclerview,您的数据集可以在xml中设置。
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:data="http://schemas.android.com/tools"
>
<data>
<import type="java.lang.String"/>
<import type="java.util.Map"/>
<variable
name="map"
type="Map<String, String>"/>
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
>
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="wrap_content"
data:map="@{map}"/>
</LinearLayout>
</layout>
在您的活动代码中,
Map<String, String> lStringStringMap = new HashMap<>();
lStringStringMap.put("A", "A1");
lStringStringMap.put("B", "B1");
lStringStringMap.put("C", "C1");
mBinding.setMap(lStringStringMap);