Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何将键入点添加到recyclerview_Android_Android Recyclerview_Recyclerview Layout - Fatal编程技术网

Android 如何将键入点添加到recyclerview

Android 如何将键入点添加到recyclerview,android,android-recyclerview,recyclerview-layout,Android,Android Recyclerview,Recyclerview Layout,您好,我正在尝试使用Socket.IO创建1on1聊天,但是我已经发出了声音,然后其他部分正在向我输入,但是我的问题是我不知道如何从这个github添加加载点: 我正在尝试让它看起来像facebook messenger,然后有人在这里键入以下图片: My activity_chat.xml: <?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:a

您好,我正在尝试使用Socket.IO创建1on1聊天,但是我已经发出了声音,然后其他部分正在向我输入,但是我的问题是我不知道如何从这个github添加加载点:

我正在尝试让它看起来像facebook messenger,然后有人在这里键入以下图片:

My activity_chat.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"
android:background="#EEEEEE"
tools:context=".ui.activity.UserChatActivity">

<android.support.v7.widget.Toolbar
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/tools"
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:background="@color/fitnessm8_green"
    android:fitsSystemWindows="true">

    <ImageView android:layout_gravity="center_vertical" android:id="@id/button_back" android:onClick="BackButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@mipmap/back_arrow" android:layout_marginRight="30dp" />

    <FrameLayout android:id="@+id/profile_photo_thumbnail_frame" android:padding="3.0dip" android:layout_width="?actionBarSize" android:layout_height="?actionBarSize">

        <de.hdodenhof.circleimageview.CircleImageView
            xmlns:app="http://schemas.android.com/apk/res-auto"
            android:id="@+id/avater_image"
            android:src="@drawable/ic_no_user"
            android:layout_width="50dp"
            android:layout_height="50dp"
            app:civ_border_width="2dp"
            app:civ_border_color="#FFFFFF"/>
    </FrameLayout>

    <TextView android:textAppearance="@style/TextAppearance.AppCompat.Widget.ActionBar.Title" android:textColor="@android:color/white" android:id="@+id/chat_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="15dp" android:drawablePadding="5.0dip" android:layout_toRightOf="@+id/avater_image" android:layout_centerVertical="true" />

</android.support.v7.widget.Toolbar>

<android.support.v7.widget.RecyclerView
    android:id="@+id/recycler_view_messages"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:layout_marginTop="0dp"
    app:layout_constraintBottom_toTopOf="@id/relativeLayout_message"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/toolbar" />

<RelativeLayout
    android:id="@+id/relativeLayout_message"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.0"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_bias="1.0">

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab_send_image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_marginEnd="8dp"
        android:layout_marginStart="8dp"
        android:tint="?attr/colorPrimaryDark"
        app:fabSize="mini"
        app:srcCompat="@drawable/ic_image_black_24dp" />

    <android.support.design.widget.TextInputEditText
        android:id="@+id/editText_message"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="8dp"
        android:layout_marginEnd="8dp"
        android:layout_toEndOf="@id/fab_send_image"
        android:background="@drawable/rect_oval_white"
        android:elevation="2dp"
        android:hint="Fire your message"
        android:padding="8dp" />

    <ImageView
        android:id="@+id/imageView_send"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentEnd="true"
        android:layout_centerVertical="true"
        android:layout_marginEnd="24dp"
        android:elevation="2dp"
        app:srcCompat="@drawable/ic_send_black_24dp" />
</RelativeLayout>

我的适配器在这里:

public class ChatRoomThreadAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

private String userId;
private int SELF = 100;
private static String today;

private Context mContext;
private ArrayList<ChatMessages> messageArrayList;

public class ViewHolder extends RecyclerView.ViewHolder {
    TextView message, timestamp, readedstatus;
    ImageView profileimage;

    public ViewHolder(View view) {
        super(view);
        message = (TextView) itemView.findViewById(R.id.message);
        timestamp = (TextView) itemView.findViewById(R.id.timestamp);
        readedstatus = (TextView) itemView.findViewById(R.id.readedstatus);
        profileimage = (ImageView) itemView.findViewById(R.id.avater_image);
    }
}

public ChatRoomThreadAdapter(Context mContext, ArrayList<ChatMessages> messageArrayList, String userId) {
    this.mContext = mContext;
    this.messageArrayList = messageArrayList;
    this.userId = userId;

    Calendar calendar = Calendar.getInstance();
    today = String.valueOf(calendar.get(Calendar.DAY_OF_MONTH));
}

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View itemView;
    if (viewType == SELF) {
        itemView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.list_item_message_right, parent, false);
    } else {
        itemView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.list_item_message_left, parent, false);
    }
    return new ViewHolder(itemView);
}

@Override
public int getItemViewType(int position) {
    ChatMessages message = messageArrayList.get(position);
    if (message.getUser().getUserId().equals(userId)) {
        return SELF;
    }
    return position;
}

@Override
public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {
    ChatMessages message = messageArrayList.get(position);

    String timestamp = TextUtils.getDateTimeStampWithTime(message.getCreatedAt());
    String fimage = message.getUser().getUserprofilepicture();
    String readedat = TextUtils.getDateTimeStampWithTime(message.getReadedAt());

    if (message.getUser().getUserId().equals(userId)) {
        // Self
        ((ViewHolder) holder).message.setText(message.getMessage());

        if (message.getUser().getUsername() != null)
            ((ViewHolder) holder).timestamp.setText(timestamp);

        ((ViewHolder) holder).readedstatus.setVisibility(View.GONE);
        ((ViewHolder) holder).readedstatus.setVisibility(View.GONE);


    } else {
        // Other
        ((ViewHolder) holder).message.setText(message.getMessage());

        if (message.getUser().getUsername() != null)
            ((ViewHolder) holder).timestamp.setText(timestamp);

        if (fimage.isEmpty()) {
            Picasso.with(mContext).load(R.drawable.ic_no_user)
                    .resize(80, 80)
                    .into(((ViewHolder) holder).profileimage);
        } else {
            Picasso.with(mContext).load(fimage)
                    .resize(80, 80)
                    .into(((ViewHolder) holder).profileimage);
        }
        if (message.getReadedAt().toString().equals("0")){
            ((ViewHolder) holder).readedstatus.setText(mContext.getResources().getString(R.string.message_delivered));
        } else {
            ((ViewHolder) holder).readedstatus.setText(mContext.getResources().getString(R.string.message_readed_at) + " " + readedat);
        }
    }
}

@Override
public int getItemCount() {
    return messageArrayList.size();
}
}
公共类聊天室线程适配器扩展了RecyclerView.Adapter{
私有字符串用户标识;
私人int SELF=100;
今天的私有静态字符串;
私有上下文;
私有ArrayList消息ArrayList;
公共类ViewHolder扩展了RecyclerView.ViewHolder{
TextView消息、时间戳、readedstatus;
图像视图轮廓图像;
公共视图持有者(视图){
超级(视图);
message=(TextView)itemView.findViewById(R.id.message);
timestamp=(TextView)itemView.findViewById(R.id.timestamp);
readedstatus=(TextView)itemView.findViewById(R.id.readedstatus);
profileimage=(ImageView)itemView.findViewById(R.id.avater\u image);
}
}
公共聊天室线程适配器(上下文mContext、ArrayList messageArrayList、字符串userId){
this.mContext=mContext;
this.messageArrayList=messageArrayList;
this.userId=userId;
日历=Calendar.getInstance();
今天=String.valueOf(calendar.get(calendar.DAY/u/u月));
}
@凌驾
public RecyclerView.ViewHolder onCreateViewHolder(视图组父级,int-viewType){
查看项目视图;
if(viewType==SELF){
itemView=LayoutInflater.from(parent.getContext())
.充气(R.layout.list\u item\u message\u right,parent,false);
}否则{
itemView=LayoutInflater.from(parent.getContext())
.充气(R.layout.list\u item\u message\u left,parent,false);
}
返回新的ViewHolder(itemView);
}
@凌驾
public int getItemViewType(int位置){
ChatMessages message=messageArrayList.get(位置);
if(message.getUser().getUserId().equals(userId)){
回归自我;
}
返回位置;
}
@凌驾
public void onBindViewHolder(final RecyclerView.ViewHolder,int位置){
ChatMessages message=messageArrayList.get(位置);
String timestamp=TextUtils.getDateTimeStampWithTime(message.getCreatedAt());
字符串fimage=message.getUser().getUserprofilepicture();
String readedat=TextUtils.getDateTimeStampWithTime(message.getReadedAt());
if(message.getUser().getUserId().equals(userId)){
//自我
((ViewHolder)holder.message.setText(message.getMessage());
if(message.getUser().getUsername()!=null)
((ViewHolder)holder.timestamp.setText(timestamp);
((ViewHolder)holder.readedstatus.setVisibility(View.GONE);
((ViewHolder)holder.readedstatus.setVisibility(View.GONE);
}否则{
//其他
((ViewHolder)holder.message.setText(message.getMessage());
if(message.getUser().getUsername()!=null)
((ViewHolder)holder.timestamp.setText(timestamp);
if(fimage.isEmpty()){
毕加索.with(mContext).load(R.drawable.ic\u no\u用户)
.调整大小(80,80)
.into(((ViewHolder)holder.profileimage);
}否则{
毕加索.with(mContext).load(fimage)
.调整大小(80,80)
.into(((ViewHolder)holder.profileimage);
}
if(message.getReadedAt().toString().equals(“0”)){
((ViewHolder)holder.readedstatus.setText(mContext.getResources().getString(R.string.message_delivered));
}否则{
((ViewHolder)holder.readedstatus.setText(mContext.getResources().getString(R.string.message_readed_at)+“”+readedat);
}
}
}
@凌驾
public int getItemCount(){
返回messageArrayList.size();
}
}
这是我使用recyclerview获取所有消息的代码:

                            ArrayList androidList = (ArrayList) response.body().getMessages();

                        messageArrayList = new ArrayList<>(androidList);

                        mAdapter = new ChatRoomThreadAdapter(getApplicationContext(), messageArrayList, selfUserId);

                        LinearLayoutManager layoutManager = new LinearLayoutManager(getApplicationContext());
                        recyclerView.setLayoutManager(layoutManager);
                        recyclerView.setItemAnimator(new DefaultItemAnimator());
                        recyclerView.setAdapter(mAdapter);

                        mAdapter.notifyDataSetChanged();
                        if (mAdapter.getItemCount() > 1) {
                            recyclerView.getLayoutManager().smoothScrollToPosition(recyclerView, null, mAdapter.getItemCount() - 1);
                        }
ArrayList androidList=(ArrayList)response.body().getMessages();
messageArrayList=newarraylist(androidList);
mAdapter=新的聊天室线程适配器(getApplicationContext(),messageArrayList,selfUserId);
LinearLayoutManager布局管理器=新的LinearLayoutManager(getApplicationContext());
recyclerView.setLayoutManager(layoutManager);
setItemAnimator(新的DefaultItemAnimator());
recyclerView.setAdapter(mAdapter);
mAdapter.notifyDataSetChanged();
if(mAdapter.getItemCount()>1){
recyclerView.getLayoutManager().smoothScrollToPosition(recyclerView,null,mAdapter.getItemCount()-1);
}

您是否阅读了该回购协议的自述文件?它给你一行你可以包含在你的Gradle配置中,然后你应该能够使用另一个布局文件,其中包括你的RecycleView适配器中的加载视图。是的,我也包括了它,但我不知道如何在RecycleView中显示它如果他们正在键入,您需要使用该视图作为布局向RecyclerView添加一个新项目。@JonathanNet感谢您提出这个问题我得到了dot动画库,实际上我正在寻找相同的项目