如何在发送消息时将列表项设置到右侧?

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 方法。