RecylverView无法在onClick之后发送消息

时间:2018-11-28 16:06:26

标签: java android android-recyclerview recycler-adapter

我已经在我的应用程序中集成了一个简单的消息传递服务。我是第一阶段,我只能发送消息而不能接收消息。问题是,当我尝试发送消息时,我的send_button没有执行任何操作。我正在使用自定义MessagesAdapter,并发送当用户转到应用程序的messages部分时显示的静态messages。任何帮助将不胜感激。我将在下方张贴我的codexml

xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".Messages">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/reyclerview_message_list"
        android:layout_width="0dp"
        android:layout_height="439dp"
        android:layout_marginBottom="8dp"
        app:layout_constraintBottom_toTopOf="@+id/layout_chatbox"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"></android.support.v7.widget.RecyclerView>

    <!-- A horizontal line between the chatbox and RecyclerView -->
    <View
        android:id="@+id/view3"
        android:layout_width="0dp"
        android:layout_height="2dp"
        android:background="#dfdfdf"
        app:layout_constraintBottom_toTopOf="@+id/layout_chatbox"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent" />

    <LinearLayout
        android:id="@+id/layout_chatbox"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:minHeight="48dp"
        android:background="#ffffff"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintLeft_toLeftOf="parent">

        <EditText
            android:id="@+id/edittext_chatbox"
            android:hint="Enter message"
            android:background="@android:color/transparent"
            android:layout_gravity="center"
            android:layout_marginLeft="16dp"
            android:layout_marginRight="16dp"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="wrap_content"
            android:maxLines="6"/>

        <Button
            android:id="@+id/button_chatbox_send"
            android:text="SEND"
            android:textSize="14dp"
            android:background="?attr/selectableItemBackground"
            android:clickable="true"
            android:layout_width="64dp"
            android:layout_height="48dp"
            android:gravity="center"
            android:layout_gravity="bottom" />

    </LinearLayout>

</android.support.constraint.ConstraintLayout>

Messages.java

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;

import java.util.ArrayList;

public class Messages extends Fragment {

    View myView;
    Button btn;
    TextView txtview;
    private RecyclerView rview;
    private RecyclerView.Adapter rviewadap;

    public ArrayList<MessagesModel> initMessages() {
        ArrayList<MessagesModel> mm = new ArrayList<>();
        mm.add(new MessagesModel("Hello this is a test", "12:41"));
        mm.add(new MessagesModel("This is another test", "12:43"));
        mm.add(new MessagesModel("How are you doing today", "12:43"));
        return mm;
    }

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        myView = inflater.inflate(R.layout.activity_messages, container, false);
//        setContentView(R.layout.activity_messages);

        ArrayList<MessagesModel> mm = initMessages();

        this.rview = myView.findViewById(R.id.reyclerview_message_list);
        RecyclerView.LayoutManager layout = new LinearLayoutManager(this.getActivity());
        this.rview.setLayoutManager(layout);

        rviewadap = new MessagesAdapter(mm);
        this.rview.setAdapter(rviewadap);

//        btn = myView.findViewById(R.id.button_chatbox_send);
//        btn.setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View view) {
//                txtview = myView.findViewById(R.id.edittext_chatbox);
//                rview = myView.findViewById(R.id.reyclerview_message_list);
//                txtview.getText();
//            }
//        });
        return myView;
    }
}

MessagesAdapter.java

import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import java.util.ArrayList;

public class MessagesAdapter extends RecyclerView.Adapter<MessagesAdapter.ViewHolder> {
    public static ArrayList<MessagesModel> mm;

    public MessagesAdapter(ArrayList<MessagesModel> mm) {
        this.mm = mm;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {

        View view = (View) LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.sent_messages, viewGroup, false);
        return new ViewHolder(view);
    }

//    @Override
//    public void onBindViewHolder(@NonNull MessagesAdapter.ViewHolder viewHolder, int i) {
//
//        MessagesModel model = mm.get(i);
//        viewHolder.message.setText(model.getMessage());
//        viewHolder.time.setText(model.getTime());
//
//    }

    @Override
    public void onBindViewHolder(@NonNull final ViewHolder viewHolder, int i) {


        viewHolder.message.setText(mm.get(i).getMessage());
        viewHolder.time.setText(mm.get(i).getTime());

    }

    @Override
    public int getItemCount() {
        if(mm != null) {
            return mm.size();
        }else {
            return 0;
        }
    }

    public class ViewHolder extends RecyclerView.ViewHolder {
//        public final View view;
        public TextView message;
        public TextView time;

        public ViewHolder(@NonNull View view) {
            super(view);
//            this.view = view;
            message = view.findViewById(R.id.text_message_body);
            System.out.println("body message id is: "+message);
            time = view.findViewById(R.id.text_message_time);
        }
    }
}

1 个答案:

答案 0 :(得分:0)

我添加了您的Messages片段类,将其替换为您现有的片段类,希望它对您有用

ArrayList<String> isiarray = new ArrayList<String>();
ArrayList<String> lab = new ArrayList<String>();