简体   繁体   中英

Android: Change chat layout message

I'm trying to change my layout depending on which user sends a message. However I find that I get that

java.lang.IndexOutOfBoundsException: Invalid index 1, size is 1 

error whenever the first message is sent. This then crashes the app.This seems to happen when the first message is sent.I have tired checking the size of messageList which is equalled to 1. So I am not sure what is wrong.

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();
    }

Try:

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

You have only one item in the list and the index is 0 . The viewType value is 1 which causes the error.

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM