如何在RecyclerviewAdapter中更新数据模型

时间:2018-06-29 11:00:58

标签: java android

我创建了一个recyclerview,可以在其中查看所有聊天记录。每个项目都包含名称,姓氏和拇指。如果用户发送或接收新消息,则该消息应显示在该位置,并且该项目应转到位置0。现在我有一个问题,即显示该消息,但是如果该位置不是,则聊天项目仅移至第一个位置0之前。因此,如果我收到两条新消息,则它不再起作用,因为数据模型与以前一样。因此,如何使我的数据模型适合每个项目的当前位置。目前,我的适配器如下所示:

private static final String TAG = "CustomAdapter";
private Context context;
private Activity mActivity;
private List<MatchesObject> matchesList;
private String currentUid;

public matchadapterino(Activity mActivity, ArrayList<MatchesObject> mDataSet) {
    this.mActivity = mActivity;
    this.matchesList = mDataSet;


}

// Create new views (invoked by the layout manager)
@Override
public matchadapterino.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
    // Create a new view.
    View v = LayoutInflater.from(viewGroup.getContext())
            .inflate(R.layout.matchesitem, viewGroup, false);

    return new matchadapterino.ViewHolder(v);
}

// Replace the contents of a view (invoked by the layout manager)
@Override
public void onBindViewHolder(final matchadapterino.ViewHolder viewHolder, final int position) {
    viewHolder.getMatchname().setText(matchesList.get(position).getUsername());

    if (!matchesList.get(position).getProfileImageUrl().equals("default")) {
        Picasso.with(mActivity).load(matchesList.get(position).getProfileImageUrl()).into(viewHolder.getMatchImage());
        getLastMSG(matchesList.get(position).getUserId(), viewHolder.getLastMSG(), position);
        viewHolder.getMatchImage().setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent i = new Intent(mActivity, UserDetailView.class);
                //
                i.putExtra("userId", matchesList.get(position).getUserId());
                mActivity.startActivity(i);
            }
        });
    } else {
        viewHolder.getMatchImage().setImageResource(R.mipmap.ic_launcher_round);
    }
    viewHolder.getForeground().setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent i = new Intent(mActivity, Chat.class);
            Bundle b = new Bundle();


            b.putString("matchId", matchesList.get(position).getUserId());
            i.putExtras(b);
            mActivity.startActivity(i);

        }
    });

}

@Override
public int getItemCount() {

    return matchesList.size();
}


// Get element from your dataset at this position and replace the contents of the view
// with that element

public void removeItem(int position) {
    matchesList.remove(matchesList.get(position));
    notifyItemRemoved(position);
}

// Return the size of your dataset (invoked by the layout manager)

/**
 * Provide a reference to the type of views that you are using (custom ViewHolder)
 */    
public class ViewHolder extends RecyclerView.ViewHolder {    
    public TextView matchname, lastMSG;    
    public ImageView matchImage;    
    private RelativeLayout foreground;
    private RelativeLayout background;


    public ViewHolder(View v) {
        super(v);
        currentUid = FirebaseAuth.getInstance().getCurrentUser().getUid();


        matchname = itemView.findViewById(R.id.matchname);
        matchImage = itemView.findViewById(R.id.matchImages);
        lastMSG = itemView.findViewById(R.id.lastmsg);
        foreground = itemView.findViewById(R.id.foregroundmatch);
        background = itemView.findViewById(R.id.backgroundmatch);
    }

    public RelativeLayout getForeground() {
        return foreground;
    }

    public RelativeLayout getBackground() {
        return background;
    }

    public TextView getLastMSG() {
        return lastMSG;
    }


    public TextView getMatchname() {
        return matchname;
    }

    public ImageView getMatchImage() {
        return matchImage;
    }


}

private void getLastMSG(final String userId, final TextView lastMSG, final int position) {
    final String userid = FirebaseAuth.getInstance().getCurrentUser().getUid();
    DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("Users").child(userid).child("connections").child("matches").child(userId);
    ref.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            if (dataSnapshot.exists()) {


                notifyItemMoved(0, position);


                Toast.makeText(mActivity, "position changed" + position, Toast.LENGTH_LONG).show();
                if (dataSnapshot.child("lastMsgBy").getValue().toString().equals(userid)) {


                    lastMSG.setTextColor(Color.parseColor("#d2403a3a"));
                    String lastMsg = dataSnapshot.child("lastMsg").getValue().toString();
                    lastMSG.setText(lastMsg);
                } else {

                    lastMSG.setTextColor(Color.parseColor("#000000"));

                    String lastMsg = dataSnapshot.child("lastMsg").getValue().toString();
                    lastMSG.setText(lastMsg);


                }
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
}
}

0 个答案:

没有答案