我具有当前的onBindViewHolder
函数:
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
myHolder = holder;
//Here I need to set text ("Hello" and "World") to myHolder.itemTextView.setText(text);
}
假设我的数据集是一个名为myDataset
的HashMap:如果我有position
,如何获取键和值?
这是我首先在活动中设置数据的方式:
mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
mRecyclerView.setHasFixedSize(true);
mLayoutManager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(mLayoutManager);
myDataset = new HashMap<>();
myDataset.put("key1", "Hello");
myDataset.put("key2", "World");
mAdapter = new HashMapAdapter(myDataset);
mRecyclerView.setAdapter(mAdapter);
或者,如果我使用的是HashMap,应该采用不基于位置的其他方式吗?
答案 0 :(得分:1)
如果使用地图作为数据源,将很困难。我建议先从map
转换为arraylist
,然后将其安装在适配器上。为什么?因为它的 POSITION 完全不能保证准确。 ,但如果您一直想使用地图,可能会像这样:
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
int i = 0;
for (Map.Entry<String, String> entry : myDataset.entrySet()) {
if(position == i){
String key = entry.getKey();
String value = entry.getValue();
// print your hello word here
break;
}
i++;
}
}
我再说一次,不要使用地图,而要使用列表,以便获得的数据顺序正确
答案 1 :(得分:0)
您可以像这样将HashMap转换为Iterator对象:
Iterator it = myDataset.entrySet().iterator();
然后迭代抛出您的迭代器值以得到您的位置,如下所示:
int p = 0;
while (it.hasNext()) {
if (p == position) {
Map.Entry pair = (Map.Entry) it.next();
System.out.println(pair.getKey() + " = " + pair.getValue());
break;
}
p++;
}