Android ListView 模拟聊天界面详解 Android ListView 是一个非常常用的控件,它可以展示一个列表式的数据,今天我们就来详细介绍如何使用 ListView 模拟聊天界面。 我们需要创建一个 Activity,並在其布局文件中添加一个 ListView 和一个 EditText,还有一个 Button 用于发送信息。 在 Activity 的 Java 代码中,我们需要首先获取到 ListView 和 EditText,并设置 Button 的点击事件。在点击事件中,我们将 EditText 中的内容添加到 ArrayList 中,並更新 ListView 的适配器。 在 ListView 的适配器中,我们需要重写 getCount、getItem 和 getItemId 三个方法,分别用于返回数据的总数、返回指定位置的数据和返回指定位置的数据的 ID。 在 getView 方法中,我们需要根据数据的类型(发送的信息还是接收的信息)来选择不同的布局文件,并将数据绑定到布局文件中。 下面是完整的代码: 首先是布局文件 activity_main.xml: ```xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <ListView android:id="@+id/lv" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" /> <EditText android:id="@+id/et_input" android:layout_width="match_parent" android:layout_height="wrap_content" /> <Button android:id="@+id/bt_send" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Send" /> </LinearLayout> ``` 然后是 Java 代码: ```java public class MainActivity extends AppCompatActivity { private ArrayList<Msg> msgs; private EditText et_input; private MyAdapter myAdapter; private ListView lv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lv = (ListView) findViewById(R.id.lv); et_input = (EditText) findViewById(R.id.et_input); findViewById(R.id.bt_send).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String content = et_input.getText().toString(); if (!content.isEmpty()) { msgs.add(new Msg(content, Msg.TYPE_SEND)); myAdapter.notifyDataSetChanged(); lv.setSelection(msgs.size() - 1); et_input.setText(""); } else { Toast.makeText(MainActivity.this, "请输入内容!", Toast.LENGTH_SHORT).show(); } } }); msgs = new ArrayList<>(); msgs.add(new Msg("hello", Msg.TYPE_RECEIVE)); msgs.add(new Msg("who is that?", Msg.TYPE_SEND)); msgs.add(new Msg("this is LiLei,nice to meet you!", Msg.TYPE_RECEIVE)); myAdapter = new MyAdapter(); lv.setAdapter(myAdapter); } private class MyAdapter extends BaseAdapter { @Override public int getCount() { return msgs.size(); } @Override public Msg getItem(int position) { return msgs.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = LayoutInflater.from(MainActivity.this).inflate(R.layout.item_send, parent, false); } TextView tv_content = (TextView) convertView.findViewById(R.id.tv_content); tv_content.setText(getItem(position).getContent()); return convertView; } } } ``` 我们还需要创建一个布局文件 item_send.xml 用于显示发送的信息: ```xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <TextView android:id="@+id/tv_content" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> ``` 这样,我们就成功地使用 ListView 模拟了一个聊天界面。
- 粉丝: 7
- 资源: 921
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Tableau2024.3新增功能-空间参数
- strategyqa-train中文思维链微调数据集
- java毕业设计-基于SSM的考研助手系统【代码+论文+PPT】.zip
- 水体分割检测-YOLOV11标记 857张图片
- 用于探测网站是否存活的一款windows工具
- PLC控制气缸弹奏电子琴的技术解析及应用案例
- 星运加速器(支持4端)
- 通信原理实验:ASK调制及解调实验
- java毕业设计-基于SSM的农业信息管理系统【代码+论文+PPT】.zip
- 非视距水下无线光信道建模与仿真技术研究
- vttdfhjdhfdkhfkdjsh
- Rust 中的一个 DirectX 玩具项目.zip
- 水体分割检测-voc标记 857张图片.zip
- 水体分割检测-YOLOV5标记 857张图片.zip
- 水体分割检测-coco标记 857张图片.zip
- 计算机视觉初学者指南:OpenCV 4.0入门与实战技巧