package com.diandi.demo.ui.activity; import android.app.ProgressDialog; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.AdapterView; import android.widget.Button; import android.widget.EditText; import com.diandi.demo.R; import com.diandi.demo.adapter.AddFriendAdapter; import com.diandi.demo.util.CollectionUtils; import com.diandi.demo.widget.xlist.XListView; import com.diandi.demo.widget.xlist.XListView.IXListViewListener; import java.util.ArrayList; import java.util.List; import cn.bmob.im.bean.BmobChatUser; import cn.bmob.im.task.BRequest; import cn.bmob.im.util.BmobLog; import cn.bmob.v3.listener.CountListener; import cn.bmob.v3.listener.FindListener; /** * ******************************************************************************* * ********* Author : klob(kloblic@gmail.com) . * ********* Date : 2014-11-29 . * ********* Time : 11:46 . * ********* Project name : Diandi1.18 . * ********* Version : 1.0 * ********* Copyright @ 2014, klob, All Rights Reserved * ******************************************************************************* */ public class AddContactActivity extends ActivityBase implements OnClickListener, IXListViewListener, AdapterView.OnItemClickListener { private EditText mmSearchNameEdit; private Button mSearchBtn; private List<BmobChatUser> mUsers = new ArrayList<BmobChatUser>(); private XListView mSearcgListView; private AddFriendAdapter mAddFriendAdapter; private int mCurPage = 0; private String mSearchName = ""; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); findView(); initView(); } @Override void findView() { setContentView(R.layout.activity_add_contact); mmSearchNameEdit = (EditText) findViewById(R.id.activity_add_contact_search_name_edit); mSearchBtn = (Button) findViewById(R.id.activity_add_contact_search_btn); mSearcgListView = (XListView) findViewById(R.id.activity_add_contact_search_listview); } @Override void initView() { initTopBarForLeft("查找好友"); initXListView(); bindEvent(); } @Override void bindEvent() { mSearchBtn.setOnClickListener(this); } private void initXListView() { // 首先不允许加载更多 mSearcgListView.setPullLoadEnable(false); // 不允许下拉 mSearcgListView.setPullRefreshEnable(false); // 设置监听器 mSearcgListView.setXListViewListener(this); mSearcgListView.pullRefreshing(); mAddFriendAdapter = new AddFriendAdapter(this, mUsers); mSearcgListView.setAdapter(mAddFriendAdapter); mSearcgListView.setOnItemClickListener(this); } private void initSearchList(final boolean isUpdate) { final ProgressDialog progressDialog = new ProgressDialog(AddContactActivity.this); if (!isUpdate) { progressDialog.setMessage("正在搜索..."); progressDialog.setCanceledOnTouchOutside(true); progressDialog.show(); } mUserManager.queryUserByPage(isUpdate, 0, mSearchName, new FindListener<BmobChatUser>() { @Override public void onError(int arg0, String arg1) { BmobLog.i("查询错误:" + arg1); if (mUsers != null) { mUsers.clear(); } ShowToast("用户不存在"); mSearcgListView.setPullLoadEnable(false); refreshPull(); //这样能保证每次查询都是从头开始 mCurPage = 0; } @Override public void onSuccess(List<BmobChatUser> arg0) { if (CollectionUtils.isNotNull(arg0)) { if (isUpdate) { mUsers.clear(); } mAddFriendAdapter.addAll(arg0); if (arg0.size() < BRequest.QUERY_LIMIT_COUNT) { mSearcgListView.setPullLoadEnable(false); ShowToast("用户搜索完成!"); } else { mSearcgListView.setPullLoadEnable(true); } } else { BmobLog.i("查询成功:无返回值"); if (mUsers != null) { mUsers.clear(); } ShowToast("用户不存在"); } if (!isUpdate) { progressDialog.dismiss(); } else { refreshPull(); } //这样能保证每次查询都是从头开始 mCurPage = 0; } }); } private void queryMoreSearchList(int page) { mUserManager.queryUserByPage(true, page, mSearchName, new FindListener<BmobChatUser>() { @Override public void onSuccess(List<BmobChatUser> arg0) { if (CollectionUtils.isNotNull(arg0)) { mAddFriendAdapter.addAll(arg0); } refreshLoad(); } @Override public void onError(int arg0, String arg1) { LogE("搜索更多用户出错:" + arg1); mSearcgListView.setPullLoadEnable(false); refreshLoad(); } }); } @Override public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) { BmobChatUser user = mAddFriendAdapter.getItem(position - 1); Intent intent = new Intent(this, ProfileActivity.class); intent.putExtra("from", "add"); intent.putExtra("username", user.getUsername()); startAnimActivity(intent); } @Override public void onClick(View arg0) { switch (arg0.getId()) { case R.id.activity_add_contact_search_btn://搜索 mUsers.clear(); mSearchName = mmSearchNameEdit.getText().toString(); if (mSearchName != null && !mSearchName.equals("")) { initSearchList(false); } else { ShowToast("请输入用户名"); } break; default: break; } } @Override public void onRefresh() { } @Override public void onLoadMore() { mUserManager.querySearchTotalCount(mSearchName, new CountListener() { @Override public void onSuccess(int arg0) { if (arg0 > mUsers.size()) { mCurPage++; queryMoreSearchList(mCurPage); } else { ShowToast("数据加载完成"); mSearcgListView.setPullLoadEnable(false); refreshLoad(); } } @Override public void onFailure(int arg0, String arg1) { LogE("查询附近的人总数失败" + arg1); refreshLoad(); } }); } private void refreshLoad() { if (mSearcgListView.getPullLoading()) { mSearcgListView.stopLoadMore(); } } private void refreshPull() { if (mSearcgListView.getPullRefreshing()) { mSearcgListView.stopRefresh(); } } }