哈希图未附加到适配器 [英] Hashmap is not attached to Adapter
本文介绍了哈希图未附加到适配器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试将map
加载到RecyclerAdapter
中,以使用值填充recyclerView
,但是在valueEventlistener
中,这些值已加载到地图中,但是adapter
并未收到有关这些更改的通知.我尝试检查map
的大小,它正确显示了值,但是当我检查adapter
内部的getitemcount()
时,它为零.
I am trying to load a map
into RecyclerAdapter
to use the values to populate recyclerView
but in valueEventlistener
the values are getting loaded into the map but adapter
is not getting notified of these changes. I tried checking the size of map
it is showing the values correctly but when i checked the getitemcount()
inside adapter
it is zero.
private Map<String, OrderItem> convoModels = new HashMap<>();
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_order_conversation);
inearLayoutManager mLayoutManager2
= new LinearLayoutManager(OrderConversation.this,
LinearLayoutManager.VERTICAL, false);
mCartList = (RecyclerView) findViewById(R.id.conversationlist);
mCartList.setLayoutManager(mLayoutManager2);
mAdapterConvo = new ConvoFirstAdapter(convoModels);
mCartList.setAdapter(mAdapterConvo);
loaddData();
}
在loadData
方法中
mDatabase.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds: dataSnapshot.getChildren()){
GenericTypeIndicator<Map<String, OrderItem>> to =
new GenericTypeIndicator<Map<String, OrderItem>>()
{};
Map<String, OrderItem> map = ds.getValue(to);
convoModels = ds.getValue(to);
mAdapterConvo.notifyDataSetChanged();
int i = mAdapterConvo.getItemCount();
Toast.makeText(OrderConversation.this, "size of map is "+
convoModels.size() + "size of adap "+ i,
Toast.LENGTH_SHORT).show();
for(OrderItem ml:convoModels.values()) {
String name = ml.getName();
Toast.makeText(OrderConversation.this, "name is "+
name, Toast.LENGTH_SHORT).show();
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
Adapter
类是
public class ConvoFirstAdapter extends
RecyclerView.Adapter<OrderConversation.ConvoViewHolder> {
private Map<String, OrderItem> userModels;
private Context context;
public ConvoFirstAdapter() {
this.userModels = new HashMap<>();
}
public ConvoFirstAdapter(Map<String, OrderItem> mMessageList) {
this.userModels = mMessageList;
}
@Override
public OrderConversation.ConvoViewHolder onCreateViewHolder(ViewGroup
parent, int viewType) {
context = parent.getContext();
return new
OrderConversation.ConvoViewHolder
(LayoutInflater.from(parent.getContext())
.inflate(R.layout.convo_layout, parent, false));
}
@Override
public void onBindViewHolder(OrderConversation.ConvoViewHolder holder,
int position) {
CustomLinearLayoutManager c = new
CustomLinearLayoutManager(context);
holder.init();
holder.setLayoutManager(c);
holder.setConvoAdapter(userModels,context);
}
@Override
public int getItemCount() {
return userModels.size();
}
}
我的数据库结构如下所示,我正在调用订单-userid- cusomerId节点
the structure of my Database is like this below i am calling orders - userid- cusomerId node
推荐答案
private Map<String, OrderItem> convoModels = new HashMap<>();
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_order_conversation);
inearLayoutManager mLayoutManager2
= new LinearLayoutManager(OrderConversation.this,
LinearLayoutManager.VERTICAL, false);
mCartList = (RecyclerView) findViewById(R.id.conversationlist);
mCartList.setLayoutManager(mLayoutManager2);
Log.e(getClass().getSimpleName(),"Initi.... Adapter");
mAdapterConvo = new ConvoFirstAdapter(convoModels);
mCartList.setAdapter(mAdapterConvo);
loaddData();
}
LoaddData();
LoaddData();
mDatabase.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds: dataSnapshot.getChildren()){
GenericTypeIndicator<Map<String, OrderItem>> to =
new GenericTypeIndicator<Map<String, OrderItem>>()
{};
Map<String, OrderItem> map = ds.getValue(to);
convoModels = ds.getValue(to);
mAdapterConvo.notifyDataSetChanged();
int i = mAdapterConvo.getItemCount();
/* Toast.makeText(OrderConversation.this, "size of map is "+
convoModels.size() + "size of adap "+ i,
Toast.LENGTH_SHORT).show(); */
Log.e("AddValueEent","size of map is: "+convoModels.size()+" size of Adap : "+i);
for(OrderItem ml:convoModels.values()) {
String name = ml.getName();
/*Toast.makeText(OrderConversation.this, "name is "+
name, Toast.LENGTH_SHORT).show();*/
Log.e("inLoop","Name is : "+name);
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.e("inCancelled","Yes");
}
});
这篇关于哈希图未附加到适配器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文