Android:更改聊天布局消息

时间:2017-09-28 18:50:30

标签: java android

我尝试根据哪个用户发送消息来更改布局。但是我发现我得到了

java.lang.IndexOutOfBoundsException: Invalid index 1, size is 1 
发送第一条消息时出现

错误。然后这会崩溃应用程序。这似乎发生在第一条消息发送时。我已经厌倦了检查messageList的大小,它等于1.所以我不确定是什么问题。

public class MessageAdapter extends RecyclerView.Adapter<MessageViewHolder> {

    private List<Message> messagesList;

    private DatabaseReference databaseReference;
    private DatabaseReference mDatabaseUser;
    private DatabaseReference userDatabaseRef;
    private   FirebaseAuth firebaseAuth;
    private Context context;
    private String imageUrl;
    private String getCurrent;
    private FirebaseAuth mAuth;

    private FirebaseUser mCurrentUser;
    public static int INCOMING = 1;
    public static int OUTGOING = 0;




    public MessageAdapter(List<Message> messagesList) {
        this.messagesList = messagesList;
    }

    @Override
    public int getItemViewType(int position) {

        mAuth = FirebaseAuth.getInstance();
        mCurrentUser = mAuth.getCurrentUser();
        mDatabaseUser = FirebaseDatabase.getInstance().getReference().child("Users").child(mCurrentUser.getUid());
        String last = mDatabaseUser.toString().substring(mDatabaseUser.toString().lastIndexOf('/') + 1);
        databaseReference = FirebaseDatabase.getInstance().getReference().child("Users").child("name");


        Message m = messagesList.get(position);


        if( m.getFrom().equals(last)){
            return  MessageAdapter.INCOMING;

        }
        if( m.getFrom()!=(last)){
            return MessageAdapter.OUTGOING;
        }

        return 0;
    }

    @Override
    public MessageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        Message c = messagesList.get(viewType);
        String sender = c.getFrom();
        databaseReference = FirebaseDatabase.getInstance().getReference().child("Users").child(sender);

        View v = null;


        if( viewType == MessageAdapter.OUTGOING ) {
            v = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.messages_layout, parent, false);

        }

        if ( viewType == MessageAdapter.INCOMING) {
            v = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.messages_layout_sent, parent, false);
        }

        return new MessageViewHolder(v);
    }
    @Override
    public void onBindViewHolder(final MessageViewHolder viewHolder, final int index) {

        getItemViewType(index);
        final Message c = messagesList.get(index);

        final String sender = c.getFrom();
        getCurrent  = sender.toString();




        databaseReference = FirebaseDatabase.getInstance().getReference().child("Users").child(sender);


        viewHolder.messageText.setText(c.getMessage());
    }

    @Override
    public int getItemCount() {
        return messagesList.size();
    }

1 个答案:

答案 0 :(得分:0)

尝试:

Message c = messagesList.get(viewType - 1);

列表中只有一个项目,索引为 0 viewType值为1会导致错误。