package com.avoscloud.beijing.push.demo.keepalive; import java.util.LinkedList; import java.util.List; import java.util.Random; import com.avos.avoscloud.AVException; import com.avos.avoscloud.AVInstallation; import com.avos.avoscloud.AVObject; import com.avos.avoscloud.AVQuery; import com.avos.avoscloud.FindCallback; import com.avos.avoscloud.SessionManager; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.graphics.Color; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; import android.widget.AdapterView.OnItemClickListener; public class UserListFragment extends Fragment { ListView onlineUserListView; View joinGroup; List<ChatUser> onlineUsers; List<String> peerIds; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.onlinelist, null); onlineUserListView = (ListView) rootView.findViewById(R.id.onlineList); joinGroup = rootView.findViewById(R.id.add_new); joinGroup.setVisibility(View.GONE); AVQuery<AVObject> aviq = new AVQuery<AVObject>("_Installation"); final String selfId = AVInstallation.getCurrentInstallation().getInstallationId(); if (onlineUsers == null) { onlineUsers = new LinkedList<ChatUser>(); } // 取出所有的在线用户,显示出来 // 如果您也想通过_Installation这张表来作为PeerId的根据,请通过管理界面打开_Installation的查找权限. // 默认系统不开放公开的查找权限 aviq.whereEqualTo("valid", true).findInBackground(new FindCallback<AVObject>() { @Override public void done(List<AVObject> parseObjects, AVException parseException) { if (parseException == null) { if (!onlineUsers.isEmpty()) { onlineUsers.clear(); } peerIds = new LinkedList<String>(); for (AVObject o : parseObjects) { HTBApplication.registerLocalNameCache(o.getString("installationId"), o.getString("name")); if (!o.getString("installationId").equals(selfId)) { ChatUser u = new ChatUser(); u.installationId = o.getString("installationId"); u.username = o.getString("name"); onlineUsers.add(u); peerIds.add(o.getString("installationId")); } } SessionManager.getInstance(AVInstallation.getCurrentInstallation().getInstallationId()) .watchPeers(peerIds); UserListAdapter adapter = new UserListAdapter(getActivity(), onlineUsers); onlineUserListView.setAdapter(adapter); onlineUserListView.setOnItemClickListener(adapter); } } }); return rootView; } public static class ChatUser { String installationId; String username; } public static class UserListAdapter extends BaseAdapter implements OnItemClickListener { public UserListAdapter(Context context, List<ChatUser> users) { this.onlineUsers = users; this.mContext = context; random = new Random(); } Context mContext; List<ChatUser> onlineUsers; Random random; @Override public int getCount() { return onlineUsers.size(); } @Override public ChatUser getItem(int position) { // TODO Auto-generated method stub return onlineUsers.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; if (convertView == null) { convertView = LayoutInflater.from(mContext).inflate(R.layout.item_chat_target, null); holder = new ViewHolder(); holder.username = (TextView) convertView.findViewById(R.id.onlinetarget); holder.avatar = (ImageView) convertView.findViewById(R.id.online_icon); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } int avatarColor = Color.argb(255, random.nextInt(256), random.nextInt(256), random.nextInt(256)); holder.avatar.setBackgroundColor(avatarColor); holder.username.setText(this.getItem(position).username); return convertView; } public class ViewHolder { TextView username; ImageView avatar; } @Override public void onItemClick(AdapterView<?> adapterView, View v, int position, long itemId) { ChatUser u = this.getItem(position); Intent i = new Intent(mContext, PrivateConversationActivity.class); i.putExtra(PrivateConversationActivity.DATA_EXTRA_SINGLE_DIALOG_TARGET, u.installationId); mContext.startActivity(i); ((Activity) mContext).overridePendingTransition(android.R.anim.slide_in_left, android.R.anim.slide_out_right); } } }