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.Group; import com.avos.avoscloud.SessionManager; import android.content.Context; 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.ImageView; import android.widget.ListView; import android.widget.TextView; import android.widget.AdapterView.OnItemClickListener; public class ChatGroupListFragment extends Fragment { ListView groupList; View joinGroup; String selfId; List<String> availableGroups; public static final String GROUP_TABLE_NAME = "AVOSRealtimeGroups"; public ChatGroupListFragment() { super(); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.onlinelist, null); groupList = (ListView) rootView.findViewById(R.id.onlineList); joinGroup = rootView.findViewById(R.id.add_new); selfId = AVInstallation.getCurrentInstallation().getInstallationId(); joinGroup.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Group group = SessionManager.getInstance(selfId).getGroup(); group.join(); } }); if (availableGroups == null) { availableGroups = new LinkedList<String>(); } fetchAvailableChatGroup(); return rootView; } private void fetchAvailableChatGroup() { // 此表是系统表,记载了当前应用内有多少聊天组,每个组内的peerIds AVQuery<AVObject> query = new AVQuery<AVObject>(GROUP_TABLE_NAME); query.findInBackground(new FindCallback<AVObject>() { @Override public void done(List<AVObject> parseObjects, AVException parseException) { if (parseException == null) { for (AVObject o : parseObjects) { availableGroups.add(o.getObjectId()); } GroupListAdapter adapter = new GroupListAdapter(getActivity(), availableGroups); groupList.setAdapter(adapter); groupList.setOnItemClickListener(adapter); } } }); } public static class GroupListAdapter extends BaseAdapter implements OnItemClickListener { public GroupListAdapter(Context context, List<String> users) { this.groups = users; this.mContext = context; random = new Random(); } Context mContext; List<String> groups; Random random; @Override public int getCount() { return groups.size(); } @Override public String getItem(int position) { // TODO Auto-generated method stub return groups.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.groupId = (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.groupId.setText(this.getItem(position)); return convertView; } public class ViewHolder { TextView groupId; ImageView avatar; } @Override public void onItemClick(AdapterView<?> adapterView, View v, int position, long itemId) { String groupId = this.getItem(position); SessionManager.getInstance(AVInstallation.getCurrentInstallation().getInstallationId()) .getGroup(groupId).join(); } } }