package org.aisen.weibo.sina.ui.fragment.search; import java.util.ArrayList; import java.util.List; import java.util.UUID; import org.aisen.weibo.sina.R; import org.aisen.weibo.sina.support.bean.SearchHisotyBean; import org.aisen.weibo.sina.support.db.SinaDB; import org.aisen.weibo.sina.support.utils.AisenUtil; import android.app.AlertDialog; import android.content.DialogInterface; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.TextView; import com.m.support.Inject.ViewInject; import com.m.support.adapter.ABaseAdapter.AbstractItemView; import com.m.support.sqlite.util.FieldUtils; import com.m.support.task.TaskException; import com.m.support.task.WorkTask; import com.m.ui.activity.BaseActivity; import com.m.ui.fragment.AListFragment; /** * 搜索历史记录 * * @author wangdan * */ public class SearchHistoryFragment extends AListFragment<SearchHisotyBean, ArrayList<SearchHisotyBean>> implements OnItemClickListener { public static SearchHistoryFragment newInstance(Type type) { SearchHistoryFragment fragment = new SearchHistoryFragment(); Bundle args = new Bundle(); args.putString("type", type.toString()); fragment.setArguments(args); return fragment; } public static void addQuery(Type type, String query) { String selection = " type = ? and query = ? "; String[] selectionArgs = new String[]{ type.toString(), query }; List<SearchHisotyBean> beans = SinaDB.getSqlite().selectAll(SearchHisotyBean.class, selection, selectionArgs); // 已存在就更新 if (beans.size() > 0) { SearchHisotyBean bean = beans.get(0); SinaDB.getSqlite().update(null, bean); } else { SearchHisotyBean bean = new SearchHisotyBean(); bean.setBeanId(UUID.randomUUID().toString()); bean.setType(type.toString()); bean.setQuery(query); SinaDB.getSqlite().insert(null, bean); } } public enum Type { user, status } private SearchTask mTask; private Type mType; private OnSearchItemClicked onseaItemClicked; @Override protected int inflateContentView() { return R.layout.ui_search_history; } @Override protected void layoutInit(LayoutInflater inflater, Bundle savedInstanceSate) { super.layoutInit(inflater, savedInstanceSate); String type = savedInstanceSate == null ? getArguments().getString("type") : savedInstanceSate.getString("type"); mType = Type.valueOf(type); getRefreshView().setOnItemClickListener(this); BaseActivity baseActivity = (BaseActivity) getActivity(); org.aisen.weibo.sina.ui.fragment.base.ActivityHelper activityHelper = (org.aisen.weibo.sina.ui.fragment.base.ActivityHelper) baseActivity.getActivityHelper(); getRefreshView().setPadding(getRefreshView().getPaddingLeft(), getRefreshView().getPaddingTop(), getRefreshView().getPaddingRight(), activityHelper.wallpaper.systemBarConfig.getPixelInsetBottom()); } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putString("type", mType.toString()); } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { if (position == getAdapterCount() - 1) { new AlertDialog.Builder(getActivity()).setTitle(R.string.remind) .setIconAttribute(android.R.attr.alertDialogIcon) .setMessage(R.string.search_clear_search_remind) .setNegativeButton(R.string.cancel, null) .setPositiveButton(R.string.confirm, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { setItems(new ArrayList<SearchHisotyBean>()); new WorkTask<Void, Void, Void>() { @Override public Void workInBackground(Void... params) throws TaskException { String whereClause = String.format(" %s = ? ", "type"); String[] whereArgs = new String[]{ mType.toString() }; SinaDB.getSqlite().delete(SearchHisotyBean.class, whereClause, whereArgs); return null; } }.execute(); } }) .show(); } else { onseaItemClicked.onItemClicked(getAdapterItems().get(position).getQuery()); } } @Override protected AbstractItemView<SearchHisotyBean> newItemView() { return new SearchUsersItemView(); } @Override public boolean onAcUnusedDoubleClicked() { return false; } public boolean _onAcUnusedDoubleClicked() { return super.onAcUnusedDoubleClicked(); } @Override protected void requestData(RefreshMode mode) { new SearchTask().execute(); } public void query() { requestData(RefreshMode.reset); } class SearchUsersItemView extends AbstractItemView<SearchHisotyBean> { @ViewInject(id = R.id.txtQuery) TextView txtQuery; @ViewInject(id = R.id.layItem) View layItem; @ViewInject(id = R.id.btnClearHistory) TextView btnClearHistory; @Override public int inflateViewId() { return R.layout.item_search_history; } @Override public void bindingData(View convertView, SearchHisotyBean data) { if (getPosition() == getAdapter().getCount() - 1) { layItem.setVisibility(View.GONE); btnClearHistory.setVisibility(View.VISIBLE); btnClearHistory.setText(data.getQuery()); } else { layItem.setVisibility(View.VISIBLE); btnClearHistory.setVisibility(View.GONE); txtQuery.setText(data.getQuery()); } AisenUtil.setAlpha(convertView); } } class SearchTask extends WorkTask<Void, Void, ArrayList<SearchHisotyBean>> { public SearchTask() { if (mTask != null) mTask.cancel(true); mTask = this; } @Override public ArrayList<SearchHisotyBean> workInBackground(Void... params) throws TaskException { String selection = String.format(" %s = ? ", "type"); String[] selectionArgs = new String[]{ mType.toString() }; return (ArrayList<SearchHisotyBean>) SinaDB.getSqlite().selectAll(SearchHisotyBean.class, selection, selectionArgs, String.format(" %s desc ", FieldUtils.CREATEAT), " 10 "); } @Override protected void onSuccess(ArrayList<SearchHisotyBean> result) { super.onSuccess(result); if (getActivity() == null) return; if (result.size() > 0) { SearchHisotyBean clearBean = new SearchHisotyBean(); clearBean.setQuery(getString(R.string.hint_clear_history)); result.add(result.size(), clearBean); setItems(result); } else { setItems(new ArrayList<SearchHisotyBean>()); } } @Override protected void onFinished() { super.onFinished(); mTask = null; } } public void setOnseaItemClicked(OnSearchItemClicked onseaItemClicked) { this.onseaItemClicked = onseaItemClicked; } public interface OnSearchItemClicked { public void onItemClicked(String query); } }