在适配器类上 如何从 HashMap 获取键和值



在我的RecyclerViewAdapter类中,我HashMap<String,ArrayList<Custom>>作为数据传递,现在我想为每个位置获取键和值,但我不知道我应该怎么做! 提前致谢

public class Main_Recycler_Single_Row extends RecyclerView.Adapter<Main_Recycler_Single_Row.ViewHolder> {

private Context mContext;
private HashMap<String,ArrayList<Products>> dataSet;
public Main_Recycler_Single_Row(Context mContext, HashMap<String,ArrayList<Products>> mDataSet) {
this.mContext = mContext;
this.dataSet = mDataSet;
} @Override
public void onBindViewHolder(@NonNull final ViewHolder holder, int position) {
Map.Entry<String,ArrayList<Products>> entry=(Map.Entry<String,ArrayList<Products>>) dataSet.entrySet();//this line is my problem!

holder.header.setText(entry.getKey());
holder.mRecyclerView.setLayoutManager(new LinearLayoutManager(mContext,LinearLayoutManager.HORIZONTAL,false));
holder.mRecyclerView.setHasFixedSize(true);
holder.mRecyclerView.setAdapter(new Main_Recycler_Sinle_Item(mContext,entry.getValue()));
}

如果您尝试使用positionHashMap获取Value,您还需要保持keysArray

keys = (String[])mDataSet.keySet().toArray();

您的ViewHolder类将如下所示:

public Main_Recycler_Single_Row(Context mContext, HashMap<String,ArrayList<Products>> mDataSet) {
this.mContext = mContext;
this.dataSet = mDataSet;
keys = (String[])mDataSet.keySet().toArray();
} @Override
public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder holder, int position) {
holder.header.setText(keys[position]);
holder.mRecyclerView.setLayoutManager(new LinearLayoutManager(mContext,LinearLayoutManager.HORIZONTAL,false));
holder.mRecyclerView.setHasFixedSize(true);
holder.mRecyclerView.setAdapter(new Main_Recycler_Sinle_Item(mContext,dataSet.get(keys[position])));
}

你必须使用 entry.getvalue((; 来获取值

String key = entry.getKey(); ArrayList<Products> value = entry.getValue();

希望这对你有用:

holder.header.setText(dataSet.getKey().toArray()[position]);// for key
holder.productDesc.setText(dataSet.get(position)
.get(productPosition).getDesc())  //sample for getting product description

要获取值:

@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {

// key
String key = (new ArrayList<>(tab.keySet())).get(position);
// value
Object value = Objects.requireNonNull(tab.get(key));
TextView textView = holder.textRecyclerView;
textView.setText(value);
}

最新更新