现在的位置: 首页 > 综合 > 正文

Android 开发即时聊天工具 YQ :(六) 最近会话列表

2013年07月06日 ⁄ 综合 ⁄ 共 2905字 ⁄ 字号 评论关闭

实现的效果如图:


RecentActivity:

public class RecentActivity extends Activity{
	ListView listView;
	List<RecentEntity> chatEntityList=new ArrayList<RecentEntity>();
	String[] mes;
	
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		setContentView(R.layout.activity_recent);
		 //注册广播
		IntentFilter myIntentFilter = new IntentFilter(); 
        myIntentFilter.addAction("org.yhn.yq.mes");
        registerReceiver(new MyBroadcastReceiver(), myIntentFilter);
        
	    listView = (ListView) findViewById(R.id.lv_recent);
        listView.setOnItemClickListener(new OnItemClickListener(){
			public void onItemClick(AdapterView<?> arg0, View arg1, int position,
					long arg3) {
				//打开聊天页面
				Intent intent=new Intent(RecentActivity.this,ChatActivity.class);
				intent.putExtra("account", Integer.parseInt(mes[0]));
				intent.putExtra("nick", "");
				startActivity(intent);
			}
        });
	}

	//广播接收器
	public class MyBroadcastReceiver extends BroadcastReceiver {
		@Override
		public void onReceive(Context context, Intent intent) {
			mes = intent.getStringArrayExtra("message");
		    Toast.makeText(context, "收到["+Integer.parseInt(mes[0])+"]的消息:"+mes[1], Toast.LENGTH_SHORT).show();
		    //更新最近会话列表, 检测chatEntityList,防止同一个好友的消息出现多个会话实体
		    Iterator it=chatEntityList.iterator();
		    if(chatEntityList!=null && chatEntityList.size()!=0){
		    	while(it.hasNext()){
		    		RecentEntity re=(RecentEntity) it.next();
		    		if(re.getAccount()==Integer.parseInt(mes[0])){
		    			chatEntityList.remove(re);
		    		}
		    	}
		    }
		    chatEntityList.add(new RecentEntity(5, Integer.parseInt(mes[0]), mes[0]+"", mes[1],mes[2], false));
		    listView.setAdapter(new RecentAdapter(RecentActivity.this, chatEntityList));
		    unregisterReceiver(this);
		}
	}
}


RecentActivity中listview的Adapter:

public class RecentAdapter extends BaseAdapter{
	private Context context;
	private List<RecentEntity> list;
	LayoutInflater inflater;
	
	public RecentAdapter(Context context,List<RecentEntity> list){
		this.context = context;
		this.list = list;
		inflater = LayoutInflater.from(context);
	}

	public View getView(int position, View convertView, ViewGroup root) {
		convertView = inflater.inflate(R.layout.recent_listview_item, null);
		
		ImageView avatar=(ImageView) convertView.findViewById(R.id.iv_avatar_r);
		TextView nick=(TextView) convertView.findViewById(R.id.tv_nick_r);
		TextView content=(TextView) convertView.findViewById(R.id.tv_chat_content_r);
		ImageView isRead=(ImageView) convertView.findViewById(R.id.iv_tip_mes_r);
		TextView time=(TextView) convertView.findViewById(R.id.tv_time_r);

		RecentEntity re=list.get(position);
		nick.setText(re.getNick());
		content.setText(re.getContent());
		isRead.setImageResource(R.drawable.tips_message);
		time.setText(re.getTime());

		return convertView;
	}
	public int getCount() {
		return list.size();
	}

	public Object getItem(int position) {
		return list.get(position);
	}

	public long getItemId(int position) {
		return position;
	}
}


消息实体类,就不贴代码了,很简单,你懂的



--------------------------------------------------分割线----------------------------------------------------------


完善了部分界面,以及一些细节,

后台运行,

增加了用户头像(简易方式,暂不能自定义头像),

用户个人信息

。。。

具体就不说了看图吧:



源码已经上传至我的资源,谢谢大家支持!欢迎一起学习交流!

转载请注明出处:http://blog.csdn.net/mimitracely


抱歉!评论已关闭.