自定义一个ListView实现聊天界面
2015-10-03 20:43
197 查看
摘要
ListView可以称得上Android中最常用也最难用的控件了,几乎所有的应用程序都会用到它。由于手机屏幕空间都比较有限,能够一次性在屏幕上显示的内容并不多,当我们的程序中有大量的数据需要展示的时候,就可以借助ListView 来实现。ListView 允许用户通过手指上下滑动的方式将屏幕外的数据滚动到屏幕内,同时屏幕上原有的数据则会滚动出屏幕。在掌握了基本的ListView用法之后,作为练习,我们可以自定义ListView实现模仿常见SNS应用的聊天界面(只提供显示功能)。实现效果如下图:
MainActivity
在initMsgs()方法中我们先初始化了几条数据用于在ListView 中显示。然后在发送按钮的点击事件里获取了EditText 中的内容,如果内容不为空则创建出一个新的Msg 对象,并把它添加到msgList 列表中去。之后又调用了适配器的notifyDataSetChanged()方法,用于通知列表的数据发生了变化,这样新增的一条消息才能够在ListView 中显示。接着调用ListView的setSelection()方法将显示的数据定位到最后一行,以保证一定可以看得到最后发出的一条消息。最后调用EditText 的setText()方法将输入的内容清空。
ListView可以称得上Android中最常用也最难用的控件了,几乎所有的应用程序都会用到它。由于手机屏幕空间都比较有限,能够一次性在屏幕上显示的内容并不多,当我们的程序中有大量的数据需要展示的时候,就可以借助ListView 来实现。ListView 允许用户通过手指上下滑动的方式将屏幕外的数据滚动到屏幕内,同时屏幕上原有的数据则会滚动出屏幕。在掌握了基本的ListView用法之后,作为练习,我们可以自定义ListView实现模仿常见SNS应用的聊天界面(只提供显示功能)。实现效果如下图:
package com.example.haisun.listview01; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.Window; import android.widget.Button; import android.widget.EditText; import android.widget.ListView; import java.util.ArrayList; import java.util.List; public class MainActivity extends Activity { private ListView msgListView; private EditText inputText; private Button send; private MsgAdapter adapter; private List<Msg> msgList = new ArrayList<Msg>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); initMsgs(); setContentView(R.layout.activity_main); adapter = new MsgAdapter(MainActivity.this,R.layout.msg_item,msgList); inputText = (EditText)findViewById(R.id.input_text); send = (Button)findViewById(R.id.send); msgListView = (ListView)findViewById(R.id.list_view); msgListView.setAdapter(adapter); send.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String content = inputText.getText().toString(); if(!"".equals(content)){ Msg msg = new Msg(content,Msg.TYPE_SEND); msgList.add(msg); adapter.notifyDataSetChanged(); msgListView.setSelection(msgList.size()); inputText.setText(""); } } }); // ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1,data); // ListView listView = (ListView)findViewById(R.id.list_view); // listView.setAdapter(adapter); } private void initMsgs() { Msg msg1 = new Msg("Hello guy.", Msg.TYPE_RECEIVED); msgList.add(msg1); Msg msg2 = new Msg("Hello. Who is that?", Msg.TYPE_SEND); msgList.add(msg2); Msg msg3 = new Msg("This is Tom. Nice talking to you. ", Msg.TYPE_RECEIVED); msgList.add(msg3); } }
MainActivity
在initMsgs()方法中我们先初始化了几条数据用于在ListView 中显示。然后在发送按钮的点击事件里获取了EditText 中的内容,如果内容不为空则创建出一个新的Msg 对象,并把它添加到msgList 列表中去。之后又调用了适配器的notifyDataSetChanged()方法,用于通知列表的数据发生了变化,这样新增的一条消息才能够在ListView 中显示。接着调用ListView的setSelection()方法将显示的数据定位到最后一行,以保证一定可以看得到最后发出的一条消息。最后调用EditText 的setText()方法将输入的内容清空。
相关文章推荐
- DirectX11 纹理采样
- Java国际化语言切换
- ACM HDU 2063 过山车(简单的二分匹配)
- 空格替换
- Log4j官方文档翻译(四、如何在java中输出日志消息)
- 【Jqurey EasyUI+Asp.net】---DataGrid增加、删、更改、搜
- C#字符串比较
- jQuery对象级插件示例
- HDU 4864(Task)
- 使用LinkedList来模拟堆栈或队列数据结构
- MFC制作加法计算器
- Java字符转码
- gradle基础
- Handler消息源代码分析
- Java入门之路-1
- UITableViewDelegate方法
- 概率论 基本概率模型、分布、期望和方差
- Invalid layout param in a LinarLayout: layout_weight
- 前序为ABC,后序为CBA的二叉树共有多少棵
- Hibernate中java对象的状态