package org.qii.weiciyuan.ui.search; import org.qii.weiciyuan.R; import org.qii.weiciyuan.bean.AtUserBean; import org.qii.weiciyuan.dao.search.AtUserDao; import org.qii.weiciyuan.support.database.AtUsersDBTask; import org.qii.weiciyuan.support.error.WeiboException; import org.qii.weiciyuan.support.lib.MyAsyncTask; import org.qii.weiciyuan.support.utils.GlobalContext; import android.app.Activity; import android.app.ListFragment; import android.app.SearchManager; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.text.TextUtils; import android.view.Menu; import android.view.MenuInflater; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.SearchView; import java.util.ArrayList; import java.util.List; /** * User: qii * Date: 12-10-8 */ public class AtUserFragment extends ListFragment { private ArrayAdapter<String> adapter; private List<String> result = new ArrayList<String>(); private List<AtUserBean> atList = new ArrayList<AtUserBean>(); private String token; private AtUserTask task; public static AtUserFragment newInstance(String token) { AtUserFragment fragment = new AtUserFragment(); Bundle bundle = new Bundle(); bundle.putString("token", token); fragment.setArguments(bundle); return fragment; } @Override public void onDetach() { super.onDetach(); if (task != null) { task.cancel(true); } } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(true); setRetainInstance(true); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); token = getArguments().getString("token"); adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, result); setListAdapter(adapter); getListView().setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Intent intent = new Intent(); intent.putExtra("name", "@" + atList.get(position).getNickname() + " "); getActivity().setResult(Activity.RESULT_OK, intent); AtUsersDBTask.add(atList.get(position), GlobalContext.getInstance().getCurrentAccountId()); getActivity().finish(); } }); atList = AtUsersDBTask.get(GlobalContext.getInstance().getCurrentAccountId()); for (AtUserBean b : atList) { result.add(b.getNickname()); } adapter.notifyDataSetChanged(); } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.actionbar_menu_atuserfragment, menu); SearchManager searchManager = (SearchManager) getActivity() .getSystemService(Context.SEARCH_SERVICE); SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView(); searchView.setSearchableInfo( searchManager.getSearchableInfo(getActivity().getComponentName())); searchView.setIconifiedByDefault(false); searchView.setQueryHint(getString(R.string.at_other)); searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { @Override public boolean onQueryTextSubmit(String query) { return false; } @Override public boolean onQueryTextChange(String newText) { if (!TextUtils.isEmpty(newText)) { if (task != null) { task.cancel(true); } task = new AtUserTask(newText); task.executeOnExecutor(MyAsyncTask.THREAD_POOL_EXECUTOR); } else { if (task != null) { task.cancel(true); } atList.clear(); result.clear(); atList = AtUsersDBTask.get(GlobalContext.getInstance().getCurrentAccountId()); for (AtUserBean b : atList) { result.add(b.getNickname()); } adapter.notifyDataSetChanged(); } return false; } }); searchView.requestFocus(); } private class AtUserTask extends MyAsyncTask<Void, List<AtUserBean>, List<AtUserBean>> { WeiboException e; String q; public AtUserTask(String q) { this.q = q; } @Override protected List<AtUserBean> doInBackground(Void... params) { AtUserDao dao = new AtUserDao(token, q); try { return dao.getUserInfo(); } catch (WeiboException e) { this.e = e; cancel(true); return null; } } @Override protected void onPostExecute(List<AtUserBean> atUserBeans) { super.onPostExecute(atUserBeans); if (isCancelled()) { return; } if (atUserBeans == null || atUserBeans.size() == 0) { result.clear(); atList.clear(); adapter.notifyDataSetChanged(); return; } result.clear(); for (AtUserBean b : atUserBeans) { if (b.getRemark().contains(q)) { result.add(b.getNickname() + "(" + b.getRemark() + ")"); } else { result.add(b.getNickname()); } } atList = atUserBeans; adapter.notifyDataSetChanged(); } } }