getViewメソッドからロードされるようになるまで戻すために待機()メソッドアンドロイド - リストビューのgetViewメソッドは、()データがfirebase
public View getView(final int position, View convertView, ViewGroup parent) {
View view;
if(convertView != null){
view = convertView;
}else{
view = View.inflate(context, resLayout, null);
}
CircleImageView ivProfile = (CircleImageView) view.findViewById(R.id.ivProfile);
tvName = (TextView) view.findViewById(R.id.tvName);
tvMessage = (TextView) view.findViewById(R.id.tvLastMessage);
tvDate = (TextView) view.findViewById(R.id.tvDate);
setData(position);
return view;
}
のsetData(位置)
private void setData(final int position){
Query query_user = FirebaseDatabase.getInstance().getReference().child("Users").
orderByChild("email").
equalTo(listOfRooms.get(position).getRecipient());
query_user.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
name = dataSnapshot.child("name").getValue().toString();
//Log.d("LOG_ROOM", String.valueOf(listOfRooms.size() + "||" + position));
//Log.d("LOG_ROOM", tvName.getText().toString() + "||" + tvMessage.getText().toString() + "||" + tvDate.getText().toString());
tvName.setText(name);
tvMessage.setText(listOfRooms.get(position).getListOfMessages().get(listOfRooms.get(position).getListOfMessages().size() - 1).getMessage());
tvDate.setText(convertTimestampIntoDate(listOfRooms.get(position).getListOfMessages().
get(listOfRooms.get(position).getListOfMessages().size() -1).getTimestamp()));
Log.d("LOG_FUNCTION", "onChildAdded Called" + ": " + name);
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
私が設定しようとしていますlistView
の各項目にデータを追加しますが、メソッドがsetData(int)
の場合、このメソッドはUI
というタスクで処理されます。ユーザー名、メッセージ、および日付のテキストをtextview
に設定します。しかし、私はこの種のコーディングで問題を発見しました。例えば、サーバから2つのデータをロードすることができるが、メソッドでデータをロードしている間に、getView()
のメソッドはview
を返し、最後の項目はlistView
に変更される。 この種の問題を補う方法はありますか?
あなたが位置に基づいて独自のaddChildEventListenerを作成する必要があります。今は前回のポジションをオーバーライドしていて、最後のアイテムにロードしています。 – Jai