这个例子只是简单的实现了单机版的聊天功能,自己跟自己聊,啦啦~~

主要还是展示RecyclerView控件的使用吧~

参考我之前写的文章:

1、先添加一个关于聊天内容的Chat.java类:

packagecom.example.chenrui.common;public classChat {privateString targetUser;privateString content;publicChat(String targetUser, String content) {this.targetUser =targetUser;this.content =content;

}publicString getTargetUser() {returntargetUser;

}public voidsetTargetUser(String targetUser) {this.targetUser =targetUser;

}publicString getContent() {returncontent;

}public voidsetContent(String content) {this.content =content;

}

}

Chat.java这个类有两个属性:聊天对象和聊天内容

2、添加一个RecyclerView控件子项chat_item.xml,这个是实现了聊天内容项的展示:

3、添加RecyclerView控件的适配器ChatAdapter.java类:

packagecom.example.chenrui.app1;importandroid.support.annotation.NonNull;importandroid.support.v7.widget.RecyclerView;importandroid.util.Log;importandroid.view.Gravity;importandroid.view.LayoutInflater;importandroid.view.View;importandroid.view.ViewGroup;importandroid.widget.LinearLayout;importandroid.widget.TextView;importcom.example.chenrui.common.Chat;importjava.util.List;public class ChatAdapter extends RecyclerView.Adapter{private ListchatList;public ChatAdapter(ListchatList) {this.chatList =chatList;

}

@NonNull

@Overridepublic ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, inti) {

View view= LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.chat_item,viewGroup,false);

ViewHolder viewHolder= newViewHolder(view);returnviewHolder;

}

@Overridepublic void onBindViewHolder(@NonNull ViewHolder viewHolder, inti) {

Chat chat=chatList.get(i);

viewHolder.chatText.setText(chat.getContent());

LinearLayout.LayoutParams params= newLinearLayout.LayoutParams(viewHolder.chatText.getLayoutParams());if(chat.getTargetUser().equals("张三")) {

params.gravity=Gravity.LEFT;

}else{

params.gravity=Gravity.RIGHT;

}

viewHolder.chatText.setLayoutParams(params);

}

@Overridepublic intgetItemCount() {returnchatList.size();

}static class ViewHolder extendsRecyclerView.ViewHolder {

TextView chatText;publicViewHolder(@NonNull View itemView) {super(itemView);

chatText=itemView.findViewById(R.id.chatText);

}

}

}

上面的代码,设置的是,如果聊天对象是张三,就把聊天内容显示在列表的左侧,否则就显示在列表的右侧。这个是模拟自己和别人对话的展示效果

4、最后就是主Activity了

activity_main.xml

MainActivity.java

packagecom.example.chenrui.app1;importandroid.os.Bundle;importandroid.support.v7.app.AppCompatActivity;importandroid.support.v7.widget.LinearLayoutManager;importandroid.support.v7.widget.RecyclerView;importandroid.view.View;importandroid.widget.ArrayAdapter;importandroid.widget.Button;importandroid.widget.EditText;importandroid.widget.Spinner;importcom.example.chenrui.common.Chat;importjava.util.ArrayList;importjava.util.List;public class MainActivity extendsAppCompatActivity {

@Overrideprotected voidonCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);final RecyclerView chatList =findViewById(R.id.chatList);final List chatData = new ArrayList();final ChatAdapter chatAdapter = newChatAdapter(chatData);

chatList.setAdapter(chatAdapter);

LinearLayoutManager layoutManager= new LinearLayoutManager(this);

chatList.setLayoutManager(layoutManager);final Spinner targetUser =findViewById(R.id.targetUser);

String[] data= {"张三","李四"};

ArrayAdapter adapter = new ArrayAdapter (this,R.layout.support_simple_spinner_dropdown_item,data);

targetUser.setAdapter(adapter);final EditText chatContent =findViewById(R.id.chatContent);

Button chatSubmit=findViewById(R.id.chatSubmit);

chatSubmit.setOnClickListener(newView.OnClickListener() {

@Overridepublic voidonClick(View v) {if(!chatContent.getText().toString().equals("")) {

String user=targetUser.getSelectedItem().toString();

chatData.add(newChat(user, chatContent.getText().toString()));

chatAdapter.notifyItemInserted(chatData.size()- 1);

chatList.scrollToPosition(chatData.size()- 1);

chatContent.setText("");

}

}

});

}

}

显示效果:

20db2c3f74b23657b4b62ccde0b5474f.png

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐