package com.gnod.geekr.ui.activity; import java.util.ArrayList; import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; import android.text.Editable; import android.text.TextWatcher; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AbsListView.OnScrollListener; import android.widget.AdapterView.OnItemClickListener; import android.widget.AbsListView; import android.widget.BaseAdapter; import android.widget.EditText; import android.widget.ListView; import android.widget.TextView; import com.actionbarsherlock.view.Menu; import com.actionbarsherlock.view.MenuItem; import com.gnod.geekr.R; import com.gnod.geekr.app.AppConfig; import com.gnod.geekr.model.UserInfoModel; import com.gnod.geekr.tool.StringUtils; import com.gnod.geekr.tool.ToastHelper; import com.gnod.geekr.tool.fetcher.BaseFetcher; import com.gnod.geekr.tool.fetcher.BaseFetcher.FetchCompleteListener; import com.gnod.geekr.tool.fetcher.NoticeFetcher; import com.gnod.geekr.tool.fetcher.SearchFetcher; import com.gnod.geekr.tool.manager.DrawableManager; import com.gnod.geekr.tool.manager.Utils; import com.gnod.geekr.widget.ListViewFooter; public class AtUserActivity extends BaseActivity { private static final int FETCH_COUNT = 30; public static final int TYPE_FOLLOWERS = 0; public static final int TYPE_FOLLOWING = 1; public static final int TYPE_AT_LIST = 2; private ListView mListView; private ArrayList<UserInfoModel> mList = new ArrayList<UserInfoModel>(); private SearchFetcher mFetcher; private ListViewFooter mFooter; private EditText mEditor; private MenuItem mRefreshMenu; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_atsearch); mFetcher = new SearchFetcher(); initView(); bindListener(); bindView(); } @Override protected void onResume() { super.onResume(); AppConfig.sImageFetcher.setExitTasksEarly(false); } @Override protected void onPause() { super.onPause(); AppConfig.sImageFetcher.setPauseWork(false); AppConfig.sImageFetcher.setExitTasksEarly(true); AppConfig.sImageFetcher.flushCache(); } @Override public boolean onCreateOptionsMenu(Menu menu) { getSupportMenuInflater().inflate(R.menu.menu_search, menu); mRefreshMenu = menu.findItem(R.id.menu_searchitem); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: finish(); return true; } return super.onOptionsItemSelected(item); } private void initView() { mListView = (ListView)findViewById(R.id.view_atsearch_list); mFooter = new ListViewFooter(this); mListView.addFooterView(mFooter); mFooter.stopLoading(""); mListView.setAdapter(userAdapter); mEditor = (EditText)findViewById(R.id.view_atsearch_edittext); } private void bindListener() { mEditor.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void afterTextChanged(Editable s) { if(s.length() == 0){ mList.clear(); mFooter.stopLoading(""); userAdapter.notifyDataSetChanged(); return; } mFetcher.fetchAtUsers(s.toString(), 20, onFetchListener); mFooter.startLoading(); setRefreshing(true); } }); mListView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { if(mList.size() == 0|| position >= mList.size()) return; Intent intent = new Intent(); UserInfoModel user = mList.get(position); intent.putExtra("Uid", user.userID); intent.putExtra("Name", user.nickName); AtUserActivity.this.setResult(RESULT_OK, intent); finish(); } }); mListView.setOnScrollListener(new AbsListView.OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { if(scrollState == OnScrollListener.SCROLL_STATE_FLING) { if (!Utils.hasHoneycomb()) { AppConfig.sImageFetcher.setPauseWork(true); } } else { AppConfig.sImageFetcher.setPauseWork(false); } } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { // TODO Auto-generated method stub } }); } private void bindView() { Intent intent = getIntent(); String type = intent.getStringExtra("Type"); if(type.equalsIgnoreCase("AtUser")) { setTitle("提到"); } else if(type.equalsIgnoreCase("Special")){ setTitle("选择"); } } private void setRefreshing(boolean checked) { if(mRefreshMenu != null){ if(checked) mRefreshMenu.setActionView(R.layout.layout_loading); else mRefreshMenu.setActionView(null); } } private FetchCompleteListener onFetchListener = new FetchCompleteListener() { @Override public void fetchComplete(int state, int code, Object obj) { setRefreshing(false); if(mEditor.length() == 0){ mFooter.stopLoading(""); return; }; switch (state) { case BaseFetcher.FETCH_NOT_NETWORK: case BaseFetcher.FETCH_AUTH_FAILED: ToastHelper.show((String) obj, 2); mFooter.stopLoading("-FAILED-"); break; case BaseFetcher.FETCH_EMPTY: mFooter.stopLoading("-ZERO-"); break; case BaseFetcher.FETCH_SUCCEED_NEWS: mList.clear(); mList.addAll( (ArrayList<UserInfoModel>)obj); userAdapter.notifyDataSetChanged(); mFooter.stopLoading("-END-"); break; default: mFooter.stopLoading(""); break; } } }; private BaseAdapter userAdapter = new BaseAdapter() { @Override public View getView(int position, View convertView, ViewGroup parent) { ItemView itemView; if(convertView == null) { itemView = new ItemView(); convertView = LayoutInflater.from(AtUserActivity.this).inflate(R.layout.listitem_search, null); itemView.textName = (TextView) convertView.findViewById(R.id.text_search_item_username); convertView.setTag(itemView); } else { itemView = (ItemView) convertView.getTag(); } UserInfoModel user = mList.get(position); itemView.textName.setText(user.nickName); return convertView; } @Override public long getItemId(int position) { return position; } @Override public Object getItem(int position) { return mList.get(position); } @Override public int getCount() { return mList.size(); } class ItemView { public TextView textName; } }; }