i have been developing an app to send and receive messages using firebase the messages appear nice and clean when all the messages are on the same side..
Adaptar:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = ((Activity) getContext()).getLayoutInflater().inflate(R.layout.item_message, parent, false);
}
ImageView photoImageView = (ImageView) convertView.findViewById(R.id.photoImageView);
TextView messageTextView = (TextView) convertView.findViewById(R.id.messageTextView);
TextView authorTextView = (TextView) convertView.findViewById(R.id.nameTextView);
LinearLayout layout = (LinearLayout) convertView.findViewById(R.id.image_container);
FriendlyMessage message = getItem(position);
boolean isPhoto = message.getPhotoUrl() != null;
if (isPhoto) {
messageTextView.setVisibility(View.GONE);
layout.setVisibility(View.VISIBLE);
layout.setMinimumHeight(200);
photoImageView.setVisibility(View.VISIBLE);
Glide.with(photoImageView.getContext())
.load(message.getPhotoUrl())
.into(photoImageView);
} else {
messageTextView.setVisibility(View.VISIBLE);
photoImageView.setVisibility(View.GONE);
layout.setVisibility(View.GONE);
layout.setMinimumHeight(0);
messageTextView.setText(message.getText());
}
messageTextView.setText(message.getText());
authorTextView.setText("." + message.getName());
return convertView;
But i want to have the users own messages in right side so wrote a code which is bolded below it works fine at first and upon scroll all shifts to right side.. tried overridding getviewcounttype but cant be implemented properly ... Any solutions to change the code or to prevent shifting of items..
This Image is working fine at first
Upon Scroll all gets moved to right
This is the code for above changes
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = ((Activity) getContext()).getLayoutInflater().inflate(R.layout.item_message, parent, false);
}
ImageView photoImageView = (ImageView) convertView.findViewById(R.id.photoImageView);
TextView messageTextView = (TextView) convertView.findViewById(R.id.messageTextView);
TextView authorTextView = (TextView) convertView.findViewById(R.id.nameTextView);
LinearLayout layout = (LinearLayout) convertView.findViewById(R.id.image_container);
FriendlyMessage message = getItem(position);
boolean isPhoto = message.getPhotoUrl() != null;
if (isPhoto) {
messageTextView.setVisibility(View.GONE);
layout.setVisibility(View.VISIBLE);
layout.setMinimumHeight(200);
photoImageView.setVisibility(View.VISIBLE);
Glide.with(photoImageView.getContext())
.load(message.getPhotoUrl())
.into(photoImageView);
} else {
messageTextView.setVisibility(View.VISIBLE);
photoImageView.setVisibility(View.GONE);
layout.setVisibility(View.GONE);
layout.setMinimumHeight(0);
messageTextView.setText(message.getText());
}
//Modified part to displaying messages on right
try {
if (user.getDisplayName().equalsIgnoreCase(message.getName())) {
System.out.println("At Gravity" + user.getDisplayName().toString() + message.getName());
messageTextView.setGravity(Gravity.RIGHT);
authorTextView.setGravity(Gravity.RIGHT);
layout.setGravity(Gravity.RIGHT);
messageTextView.setMaxWidth(200);
authorTextView.setTextColor(Color.CYAN);
}
} catch (NullPointerException e) {
System.out.println("Exception catched");
}
messageTextView.setText(message.getText());
authorTextView.setText("." + message.getName());
return convertView;
Any possible fix for this issue???
请在适配器中使用setTag()和getTag(),但是更好的做法是使用RecyclerView
而不是ListView
。
You need to add an else statement since the ListView
reuses its itemviews. Once you set a view to the right, it has no chance of changing its alignment back to the left on its own.
if (user.getDisplayName().equalsIgnoreCase(message.getName())) {
System.out.println("At Gravity" + user.getDisplayName().toString() + message.getName());
messageTextView.setGravity(Gravity.RIGHT);
authorTextView.setGravity(Gravity.RIGHT);
layout.setGravity(Gravity.RIGHT);
messageTextView.setMaxWidth(200);
authorTextView.setTextColor(Color.CYAN);
}else{
messageTextView.setGravity(Gravity.LEFT);
authorTextView.setGravity(Gravity.LET);
layout.setGravity(Gravity.LEFT);
messageTextView.setMaxWidth(200);
authorTextView.setTextColor(Color.CYAN);
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.