如何在发送消息时将列表项设置到右侧?
How to set the list item to the right when the message is sent?
问题是列表中的每一项都左对齐。但是,我想区分发送的消息和传入的消息。
我有两个布局文件:
我的 MessageAdapter class:
中有这个 if
声明
if (convertView == null) {
convertView = ((Activity) getContext()).getLayoutInflater().inflate(R.layout.item_message_right_admin, parent,
}
这是我的应用程序的屏幕截图:
I saw one post on Stack overflow regarding the same problem. I found a clue, but I'm
not able to implement it. Can anyone suggest me in doing this ? The following is the clue.
So, whenever a user presses on send button, his message should be on right. Incoming messages should be on left.
if (convertView == null) {
if (list.get(position).getTypeOfSms().equals("send"))
convertView = myInflater.inflate(R.layout.raw_left, null);
else
convertView = myInflater.inflate(R.layout.raw_right, null);
当用户点击发送按钮时,应该怎样做才能使发送的消息右对齐?
像这样更改您的适配器代码,
import android.app.Activity;
import android.content.Context;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.List;
public class MessageAdapter extends ArrayAdapter<Message> {
private static final int ROW_TYPE_LEFT = 0;
private static final int ROW_TYPE_RIGHT = 1;
private List<Message> messagesList;
public MessageAdapter(Context context, int resource, List<Message> objects) {
super(context, resource, objects);
this.messagesList = objects;
}
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public int getItemViewType(int pos) {
return messagesList.get(pos).isDelivered() ? ROW_TYPE_LEFT : ROW_TYPE_RIGHT ;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// Gets the message that we are displaying at a position
Message message = getItem(position);
Log.d("TAG", "message: " + message);
// Check if an existing view is being reused, otherwise inflate the view
if (convertView == null) {
int rowType = getItemViewType(position);
switch (rowType)
{
case ROW_TYPE_RIGHT:
convertView = ((Activity) getContext()).getLayoutInflater().inflate(R.layout.item_message_right_admin, parent, false);
break;
case ROW_TYPE_LEFT:
convertView = ((Activity) getContext()).getLayoutInflater().inflate(R.layout.item_message_left_user, parent, false);
default:
}
}
// Lookup view for data population
ImageView photoImageView = (ImageView) convertView.findViewById(R.id.photoImageView);
TextView messageTextView = (TextView) convertView.findViewById(R.id.messageTextView);
TextView authorTextView = (TextView) convertView.findViewById(R.id.nameTextView);
boolean isPhoto = message.getPhotoUrl() != null;
if (isPhoto) {
messageTextView.setVisibility(View.GONE);
photoImageView.setVisibility(View.VISIBLE);
Glide.with(photoImageView.getContext())
.load(message.getPhotoUrl())
.into(photoImageView);
} else {
messageTextView.setVisibility(View.VISIBLE);
photoImageView.setVisibility(View.GONE);
messageTextView.setText(message.getText());
}
authorTextView.setText(message.getName());
// Return the completed view to render on screen
return convertView;
}
}
并在 Message
模型中添加 isDelivered
方法。
问题是列表中的每一项都左对齐。但是,我想区分发送的消息和传入的消息。
我有两个布局文件:
我的 MessageAdapter class:
中有这个if
声明
if (convertView == null) {
convertView = ((Activity) getContext()).getLayoutInflater().inflate(R.layout.item_message_right_admin, parent,
}
这是我的应用程序的屏幕截图:
I saw one post on Stack overflow regarding the same problem. I found a clue, but I'm not able to implement it. Can anyone suggest me in doing this ? The following is the clue. So, whenever a user presses on send button, his message should be on right. Incoming messages should be on left.
if (convertView == null) {
if (list.get(position).getTypeOfSms().equals("send"))
convertView = myInflater.inflate(R.layout.raw_left, null);
else
convertView = myInflater.inflate(R.layout.raw_right, null);
当用户点击发送按钮时,应该怎样做才能使发送的消息右对齐?
像这样更改您的适配器代码,
import android.app.Activity;
import android.content.Context;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.List;
public class MessageAdapter extends ArrayAdapter<Message> {
private static final int ROW_TYPE_LEFT = 0;
private static final int ROW_TYPE_RIGHT = 1;
private List<Message> messagesList;
public MessageAdapter(Context context, int resource, List<Message> objects) {
super(context, resource, objects);
this.messagesList = objects;
}
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public int getItemViewType(int pos) {
return messagesList.get(pos).isDelivered() ? ROW_TYPE_LEFT : ROW_TYPE_RIGHT ;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// Gets the message that we are displaying at a position
Message message = getItem(position);
Log.d("TAG", "message: " + message);
// Check if an existing view is being reused, otherwise inflate the view
if (convertView == null) {
int rowType = getItemViewType(position);
switch (rowType)
{
case ROW_TYPE_RIGHT:
convertView = ((Activity) getContext()).getLayoutInflater().inflate(R.layout.item_message_right_admin, parent, false);
break;
case ROW_TYPE_LEFT:
convertView = ((Activity) getContext()).getLayoutInflater().inflate(R.layout.item_message_left_user, parent, false);
default:
}
}
// Lookup view for data population
ImageView photoImageView = (ImageView) convertView.findViewById(R.id.photoImageView);
TextView messageTextView = (TextView) convertView.findViewById(R.id.messageTextView);
TextView authorTextView = (TextView) convertView.findViewById(R.id.nameTextView);
boolean isPhoto = message.getPhotoUrl() != null;
if (isPhoto) {
messageTextView.setVisibility(View.GONE);
photoImageView.setVisibility(View.VISIBLE);
Glide.with(photoImageView.getContext())
.load(message.getPhotoUrl())
.into(photoImageView);
} else {
messageTextView.setVisibility(View.VISIBLE);
photoImageView.setVisibility(View.GONE);
messageTextView.setText(message.getText());
}
authorTextView.setText(message.getName());
// Return the completed view to render on screen
return convertView;
}
}
并在 Message
模型中添加 isDelivered
方法。