实例介绍
【实例截图】
【核心代码】
package com.zhy.baiduyun.im;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.baidu.android.pushservice.PushManager;
import com.jauker.widget.BadgeView;
import com.zhy.baiduyun.im.bean.ChatMessage;
import com.zhy.baiduyun.im.bean.Message;
import com.zhy.baiduyun.im.bean.User;
import com.zhy.baiduyun.im.client.PushMessageReceiver;
import com.zhy.baiduyun.im.client.PushMessageReceiver.onNewFriendListener;
import com.zhy.baiduyun.im.client.PushMessageReceiver.onNewMessageListener;
import com.zhy.baiduyun.im.utils.SharePreferenceUtil;
import com.zhy.baiduyun.im.utils.T;
import com.zhy.baiduyun.im.utils.TimeUtil;
/**
* 朋友列表界面
*
* @author zhy
*
*/
public class MainTabFriends extends Fragment implements onNewFriendListener,
onNewMessageListener
{
public static final String TAG = MainTabFriends.class.getSimpleName();
/**
* 提供未读消息更新的回调,比如来了一个新消息或者用户点击查看某个用户的消息
*
* @author zhy
*
*/
public interface OnUnReadMessageUpdateListener
{
void unReadMessageUpdate(int count);
}
/**
* 存储userId-新来消息的个数
*/
public Map<String, Integer> mUserMessages = new HashMap<String, Integer>();
/**
* 未读消息总数
*/
private int mUnReadedMsgs;
private ListView mFrineds;
private View mEmptyView;
/**
* 所有的用户
*/
private List<User> mDatas;
/**
* 适配器
*/
private FriendsListAdapter mAdapter;
private PushApplication mApplication;
private LayoutInflater mInflater;
private SharePreferenceUtil mSpUtils;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
Log.e(TAG, "onCreate");
mInflater = LayoutInflater.from(getActivity());
mApplication = (PushApplication) this.getActivity().getApplication();
mAdapter = new FriendsListAdapter();
mDatas = mApplication.getUserDB().getUser();
mSpUtils = PushApplication.getInstance().getSpUtil();
// 获取数据库中所有的用户以及未读消息个数
mUserMessages = mApplication.getMessageDB().getUserUnReadMsgs(
mApplication.getUserDB().getUserIds());
for (Integer val : mUserMessages.values())
{
mUnReadedMsgs = val;
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
View view = inflater
.inflate(R.layout.main_tab_weixin, container, false);
mFrineds = (ListView) view.findViewById(R.id.id_listview_friends);
mEmptyView = inflater.inflate(R.layout.no_zuo_no_die, container, false);
mFrineds.setEmptyView(mEmptyView);
mFrineds.setAdapter(mAdapter);
notifyUnReadedMsg();
mFrineds.setOnItemClickListener(new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id)
{
String userId = mDatas.get(position).getUserId();
if (userId.equals(mSpUtils.getUserId()))
{
T.showShort(getActivity(), "不能和自己聊天哈!");
return;
}
if (mUserMessages.containsKey(userId))
{
Integer val = mUserMessages.get(userId);
mUnReadedMsgs -= val;
mUserMessages.remove(userId);
mAdapter.notifyDataSetChanged();
notifyUnReadedMsg();
}
Intent intent = new Intent(getActivity(),
ChattingActivity.class);
intent.putExtra("userId", mDatas.get(position).getUserId());
startActivity(intent);
}
});
return view;
}
/**
* 回调未读消息个数
*/
private void notifyUnReadedMsg()
{
if (getActivity() instanceof OnUnReadMessageUpdateListener)
{
OnUnReadMessageUpdateListener listener = (OnUnReadMessageUpdateListener) getActivity();
listener.unReadMessageUpdate(mUnReadedMsgs);
}
}
@Override
public void onResume()
{
super.onResume();
Log.e(TAG, "onResume");
// 回调未读消息个数的更新
notifyUnReadedMsg();
// 设置新朋友的监听
PushMessageReceiver.friendListeners.add(this);
// 设置新消息的监听
PushMessageReceiver.msgListeners.add(this);
if (!PushManager.isPushEnabled(getActivity()))
PushManager.resumeWork(getActivity());
// 更新用户列表
mDatas = mApplication.getUserDB().getUser();
mAdapter.notifyDataSetChanged();
}
@Override
public void onPause()
{
super.onPause();
Log.e(TAG, "onPause");
/**
* 当onPause时,取消监听
*/
PushMessageReceiver.friendListeners.remove(this);
PushMessageReceiver.msgListeners.remove(this);
}
/**
* 收到新消息时
*/
@Override
public void onNewMessage(Message message)
{
// 如果是自己发送的,则直接返回
if (message.getUserId() == mSpUtils.getUserId())
return;
// 如果该用户已经有未读消息,更新未读消息的个数,并通知更新未读消息接口,最后notifyDataSetChanged
String userId = message.getUserId();
if (mUserMessages.containsKey(userId))
{
mUserMessages.put(userId, mUserMessages.get(userId) 1);
} else
{
mUserMessages.put(userId, 1);
}
mUnReadedMsgs ;
notifyUnReadedMsg();
// 将新来的消息进行存储
ChatMessage chatMessage = new ChatMessage(message.getMessage(), true,
userId, message.getHeadIcon(), message.getNickname(), false,
TimeUtil.getTime(message.getTimeSamp()));
mApplication.getMessageDB().add(userId, chatMessage);
// 通知listview数据改变
mAdapter.notifyDataSetChanged();
}
/**
* 监听新朋友到来的通知
*/
@Override
public void onNewFriend(User u)
{
Log.e(TAG, "get a new friend :" u.getUserId() " , " u.getNick());
mDatas.add(u);
mAdapter.notifyDataSetChanged();
}
private class FriendsListAdapter extends BaseAdapter
{
@Override
public int getCount()
{
return mDatas.size();
}
@Override
public Object getItem(int position)
{
return mDatas.get(position);
}
@Override
public long getItemId(int position)
{
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
User user = mDatas.get(position);
String userId = user.getUserId();
ViewHolder holder = null;
if (convertView == null)
{
convertView = mInflater.inflate(
R.layout.main_tab_weixin_info_item, parent, false);
holder = new ViewHolder();
holder.mNickname = (TextView) convertView
.findViewById(R.id.id_nickname);
holder.mUserId = (TextView) convertView
.findViewById(R.id.id_userId);
holder.mWapper = (RelativeLayout) convertView
.findViewById(R.id.id_item_ly);
convertView.setTag(holder);
} else
{
holder = (ViewHolder) convertView.getTag();
}
// 如果存在新的消息,则设置BadgeView
if (mUserMessages.containsKey(userId))
{
if (holder.mBadgeView == null)
holder.mBadgeView = new BadgeView(mApplication);
holder.mBadgeView.setTargetView(holder.mWapper);
holder.mBadgeView.setBadgeGravity(Gravity.CENTER_VERTICAL
| Gravity.RIGHT);
holder.mBadgeView.setBadgeMargin(0, 0, 8, 0);
holder.mBadgeView.setBadgeCount(mUserMessages.get(userId));
} else
{
if (holder.mBadgeView != null)
holder.mBadgeView.setVisibility(View.GONE);
}
holder.mNickname.setText(mDatas.get(position).getNick());
holder.mUserId.setText(userId);
return convertView;
}
private final class ViewHolder
{
TextView mNickname;
TextView mUserId;
RelativeLayout mWapper;
BadgeView mBadgeView;
}
}
}
标签: 微信
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明


网友评论
我要评论