51群聊的Adapter的实现

最终实现的效果:


群聊的整体是ListView,在适配器中,他含有三种子View,一个是搜索框,一个是新建群组,还有一个是群组列表。真个Adapter继承自ArrayAdapter。

这里重写的方法包括:

1.getItemViewType

@Override
	public int getItemViewType(int position) {
		if (position == 0) {
			return 0;
		} else if (position == getCount() - 1) {
			return 1;
		} else {
			return 2;
		}
	}

2.getViewTypeCount

@Override
	public int getViewTypeCount() {
		return 3;
	}
3.getCount:

@Override
	public int getCount() {
		return super.getCount() + 2;
	}

4.getView

@Override
	public View getView(int position, View convertView, ViewGroup parent) {

		if (getItemViewType(position) == 0) {
			if (convertView == null) {
				convertView = inflater.inflate(
						R.layout.search_bar_with_padding, null);
			}
			final EditText query = (EditText) convertView
					.findViewById(R.id.query);
			final ImageButton clearSearch = (ImageButton) convertView
					.findViewById(R.id.search_clear);
			query.addTextChangedListener(new TextWatcher() {

				@Override
				public void onTextChanged(CharSequence s, int start,
						int before, int count) {
					getFilter().filter(s);
					if (s.length() > 0) {
						clearSearch.setVisibility(View.VISIBLE);
					} else {
						clearSearch.setVisibility(View.INVISIBLE);
					}
				}

				@Override
				public void beforeTextChanged(CharSequence s, int start,
						int count, int after) {

				}

				@Override
				public void afterTextChanged(Editable s) {

				}
			});
			clearSearch.setOnClickListener(new OnClickListener() {

				@Override
				public void onClick(View v) {
					query.getText().clear();

				}
			});
		} else if (getItemViewType(position) == 1) {
			if (convertView == null) {
				convertView = inflater.inflate(R.layout.row_add_group, null);
			}
			((ImageView) convertView.findViewById(R.id.avatar))
					.setImageResource(R.drawable.roominfo_add_btn);
			((TextView) convertView.findViewById(R.id.name)).setText("新建群组");
		} else {
			if (convertView == null) {
				convertView = inflater.inflate(R.layout.row_group, null);
			}

			((TextView) convertView.findViewById(R.id.name)).setText(getItem(
					position - 1).getGroupName());

		}
		return convertView;
	}

完整的代码:

package com.dystu.impro.adapter;

import java.util.List;

import android.content.Context;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;

import com.dystu.impro.R;
import com.easemob.chat.EMGroup;

public class GroupAdapter extends ArrayAdapter<EMGroup> {

	private LayoutInflater inflater;

	public GroupAdapter(Context context, int res, List<EMGroup> groups) {
		super(context, res, groups);
		this.inflater = LayoutInflater.from(context);
	}

	@Override
	public int getItemViewType(int position) {
		if (position == 0) {
			return 0;
		} else if (position == getCount() - 1) {
			return 1;
		} else {
			return 2;
		}
	}

	@Override
	public int getViewTypeCount() {
		return 3;
	}

	@Override
	public int getCount() {
		return super.getCount() + 2;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {

		if (getItemViewType(position) == 0) {
			if (convertView == null) {
				convertView = inflater.inflate(
						R.layout.search_bar_with_padding, null);
			}
			final EditText query = (EditText) convertView
					.findViewById(R.id.query);
			final ImageButton clearSearch = (ImageButton) convertView
					.findViewById(R.id.search_clear);
			query.addTextChangedListener(new TextWatcher() {

				@Override
				public void onTextChanged(CharSequence s, int start,
						int before, int count) {
					getFilter().filter(s);
					if (s.length() > 0) {
						clearSearch.setVisibility(View.VISIBLE);
					} else {
						clearSearch.setVisibility(View.INVISIBLE);
					}
				}

				@Override
				public void beforeTextChanged(CharSequence s, int start,
						int count, int after) {

				}

				@Override
				public void afterTextChanged(Editable s) {

				}
			});
			clearSearch.setOnClickListener(new OnClickListener() {

				@Override
				public void onClick(View v) {
					query.getText().clear();

				}
			});
		} else if (getItemViewType(position) == 1) {
			if (convertView == null) {
				convertView = inflater.inflate(R.layout.row_add_group, null);
			}
			((ImageView) convertView.findViewById(R.id.avatar))
					.setImageResource(R.drawable.roominfo_add_btn);
			((TextView) convertView.findViewById(R.id.name)).setText("新建群组");
		} else {
			if (convertView == null) {
				convertView = inflater.inflate(R.layout.row_group, null);
			}

			((TextView) convertView.findViewById(R.id.name)).setText(getItem(
					position - 1).getGroupName());

		}
		return convertView;
	}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现 WebSocket 的群聊,你可以按照以下步骤进行: 1. 创建一个 WebSocket 服务器:使用你选择的编程语言和框架,创建一个 WebSocket 服务器。这个服务器将处理客户端的连接和消息传递。 2. 客户端连接:客户端使用 WebSocket 协议连接到服务器。可以通过在浏览器中使用 JavaScript 的 WebSocket API 或使用其他编程语言和库来实现。 3. 服务器端处理连接:当客户端连接到服务器时,服务器应该将该连接保存下来,并分配一个唯一的标识符,以便稍后识别该客户端。 4. 群聊功能:服务器需要维护一个群聊的状态,用于保存所有参与群聊的连接信息。这可以是一个数据结构,如列表或哈希表。 5. 消息传递:当一个客户端发送一条消息到服务器时,服务器应该将该消息传递给所有参与群聊的客户端。这可以通过遍历保存的连接并逐个发送消息来实现。 6. 客户端接收消息:在客户端上,你需要实现接收服务器发送的消息的逻辑。这可以通过监听 WebSocket 的 `onmessage` 事件,并在事件处理程序中处理收到的消息。 7. 客户端发送消息:当用户在客户端上发送一条消息时,你需要将该消息发送给服务器。这可以通过使用 WebSocket 的 `send` 方法来实现。 通过以上步骤,你可以实现一个基本的 WebSocket 群聊功能。请注意,这只是一个简单的示例,你可能还需要考虑一些其他的安全性和性能方面的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值