package com.netease.nim.demo.main.activity; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.AbsListView; import android.widget.AdapterView; import android.widget.ListView; import android.widget.Toast; import com.netease.nim.demo.R; import com.netease.nim.demo.session.SessionHelper; import com.netease.nim.uikit.cache.TeamDataCache; import com.netease.nim.uikit.common.activity.UI; import com.netease.nim.uikit.contact.core.item.AbsContactItem; import com.netease.nim.uikit.contact.core.item.ContactItem; import com.netease.nim.uikit.contact.core.item.ItemTypes; import com.netease.nim.uikit.contact.core.model.ContactDataAdapter; import com.netease.nim.uikit.contact.core.model.ContactGroupStrategy; import com.netease.nim.uikit.contact.core.provider.ContactDataProvider; import com.netease.nim.uikit.contact.core.query.IContactDataProvider; import com.netease.nim.uikit.contact.core.viewholder.ContactHolder; import com.netease.nim.uikit.contact.core.viewholder.LabelHolder; import com.netease.nim.uikit.model.ToolBarOptions; import com.netease.nimlib.sdk.NIMClient; import com.netease.nimlib.sdk.team.TeamService; import com.netease.nimlib.sdk.team.constant.TeamTypeEnum; import com.netease.nimlib.sdk.team.model.Team; import java.util.List; /** * 群列表(通讯录) * <p/> * Created by huangjun on 2015/4/21. */ public class TeamListActivity extends UI implements AdapterView.OnItemClickListener { private static final String EXTRA_DATA_ITEM_TYPES = "EXTRA_DATA_ITEM_TYPES"; private ContactDataAdapter adapter; private ListView lvContacts; private int itemType; public static final void start(Context context, int teamItemTypes) { Intent intent = new Intent(); intent.setClass(context, TeamListActivity.class); intent.putExtra(EXTRA_DATA_ITEM_TYPES, teamItemTypes); context.startActivity(intent); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); itemType = getIntent().getIntExtra(EXTRA_DATA_ITEM_TYPES, ItemTypes.TEAMS.ADVANCED_TEAM); setContentView(R.layout.group_list_activity); ToolBarOptions options = new ToolBarOptions(); options.titleId = itemType == ItemTypes.TEAMS.ADVANCED_TEAM ? R.string.advanced_team : R.string.normal_team; setToolBar(R.id.toolbar, options); lvContacts = (ListView) findViewById(R.id.group_list); GroupStrategy groupStrategy = new GroupStrategy(); IContactDataProvider dataProvider = new ContactDataProvider(itemType); adapter = new ContactDataAdapter(this, groupStrategy, dataProvider) { @Override protected List<AbsContactItem> onNonDataItems() { return null; } @Override protected void onPreReady() { } @Override protected void onPostLoad(boolean empty, String queryText, boolean all) { } }; adapter.addViewHolder(ItemTypes.LABEL, LabelHolder.class); adapter.addViewHolder(ItemTypes.TEAM, ContactHolder.class); lvContacts.setAdapter(adapter); lvContacts.setOnItemClickListener(this); lvContacts.setOnScrollListener(new AbsListView.OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { showKeyboard(false); } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { } }); // load data int count = NIMClient.getService(TeamService.class).queryTeamCountByTypeBlock(itemType == ItemTypes.TEAMS .ADVANCED_TEAM ? TeamTypeEnum.Advanced : TeamTypeEnum.Normal); if (count == 0) { if (itemType == ItemTypes.TEAMS.ADVANCED_TEAM) { Toast.makeText(TeamListActivity.this, R.string.no_team, Toast.LENGTH_SHORT).show(); } else if (itemType == ItemTypes.TEAMS.NORMAL_TEAM) { Toast.makeText(TeamListActivity.this, R.string.no_normal_team, Toast.LENGTH_SHORT).show(); } } adapter.load(true); registerTeamUpdateObserver(true); } @Override protected void onDestroy() { super.onDestroy(); registerTeamUpdateObserver(false); } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { AbsContactItem item = (AbsContactItem) adapter.getItem(position); switch (item.getItemType()) { case ItemTypes.TEAM: SessionHelper.startTeamSession(this, ((ContactItem) item).getContact().getContactId()); break; } } private void registerTeamUpdateObserver(boolean register) { if (register) { TeamDataCache.getInstance().registerTeamDataChangedObserver(teamDataChangedObserver); } else { TeamDataCache.getInstance().unregisterTeamDataChangedObserver(teamDataChangedObserver); } } TeamDataCache.TeamDataChangedObserver teamDataChangedObserver = new TeamDataCache.TeamDataChangedObserver() { @Override public void onUpdateTeams(List<Team> teams) { adapter.load(true); } @Override public void onRemoveTeam(Team team) { adapter.load(true); } }; private static class GroupStrategy extends ContactGroupStrategy { GroupStrategy() { add(ContactGroupStrategy.GROUP_NULL, 0, ""); // 默认分组 } @Override public String belongs(AbsContactItem item) { switch (item.getItemType()) { case ItemTypes.TEAM: return GROUP_NULL; default: return null; } } } }