package cn.scau.scautreasure.ui; import android.support.v4.view.MenuItemCompat; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.widget.SearchView; import android.view.MenuItem; import android.view.View; import android.widget.AdapterView; import android.widget.ImageView; import android.widget.ListView; import com.devspark.appmsg.AppMsg; import com.handmark.pulltorefresh.library.PullToRefreshBase; import com.handmark.pulltorefresh.library.PullToRefreshListView; import com.tjerkw.slideexpandable.library.SlideExpandableListAdapter; import org.androidannotations.annotations.AfterViews; import org.androidannotations.annotations.Background; import org.androidannotations.annotations.EActivity; import org.androidannotations.annotations.UiThread; import org.androidannotations.annotations.ViewById; import org.androidannotations.annotations.rest.RestService; import org.springframework.web.client.HttpStatusCodeException; import java.util.List; import cn.scau.scautreasure.R; import cn.scau.scautreasure.adapter.SearchBookAdapter; import cn.scau.scautreasure.api.LibraryApi; import cn.scau.scautreasure.helper.UIHelper; import cn.scau.scautreasure.model.BookModel; import cn.scau.scautreasure.util.CryptUtil; import static cn.scau.scautreasure.helper.UIHelper.LISTVIEW_EFFECT_MODE.EXPANDABLE_SWING; /** * User: special * Date: 13-8-18 * Time: 下午9:27 * Mail: specialcyci@gmail.com */ @EActivity( R.layout.searchbook ) public class SearchBook extends CommonActivity { @RestService LibraryApi api; @ViewById( R.id.listView ) PullToRefreshListView pullListView; @ViewById SwipeRefreshLayout swipe_refresh; /** * 一共搜索到多少本书 */ private int count; /** * 当前页数; */ private int page; private String searchKeyword; private SearchBookAdapter bookadapter; private SlideExpandableListAdapter exadapter; private SearchView searchView; private MenuItem menuItemSearch; @AfterViews void init(){ setTitle(getString(R.string.title_search_book)); tips_empty = R.string.tips_searchbook_null; pullListView.setOnRefreshListener(onRefreshListener); pullListView.setOnItemClickListener(onListViewItemClicked); setSwipeRefresh(); } private void setSwipeRefresh() { swipe_refresh.setEnabled(false); // 顶部刷新的样式 swipe_refresh.setColorScheme(R.color.swipe_refresh_1, R.color.swipe_refresh_2, R.color.swipe_refresh_3, R.color.swipe_refresh_4); } /** * listView下拉刷新; */ private PullToRefreshBase.OnRefreshListener onRefreshListener = new PullToRefreshBase.OnRefreshListener() { @Override public void onRefresh(PullToRefreshBase refreshView) { if(page < Math.ceil(count/10)){ page++; loadData(); }else{ AppMsg.makeText(getSherlockActivity(), R.string.tips_default_last, AppMsg.STYLE_CONFIRM).show(); refreshView.setRefreshing(false); } } }; /** * listView选中图书: */ private AdapterView.OnItemClickListener onListViewItemClicked = new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long l) { BookModel book = (BookModel) parent.getAdapter().getItem(position); BookDetail_.intent(getSherlockActivity()).bookName(book.getTitle()).url(book.getUrl()).start(); } }; @UiThread void showSuccessResult(BookModel.BookList l){ // new search if(bookadapter == null){ count = l.getCount(); setListViewAdapter(l.getBooks()); String tips = getString(R.string.tips_searchbook_count) + count; swipe_refresh.setRefreshing(false); AppMsg.makeText(getSherlockActivity(),tips,AppMsg.STYLE_INFO).show(); }else{ // next page; bookadapter.addAll(l.getBooks()); pullListView.onRefreshComplete(); bookadapter.notifyDataSetChanged(); adapter.notifyDataSetChanged(); } } @UiThread void onFailed(){ swipe_refresh.setRefreshing(false); } private void setListViewAdapter(List<BookModel> books){ bookadapter = new SearchBookAdapter(getSherlockActivity(), R.layout.searchbook_listitem,books); ListView lv = pullListView.getRefreshableView(); adapter = UIHelper.buildEffectAdapter(bookadapter, lv, EXPANDABLE_SWING); pullListView.setAdapter(adapter); } @Background( id = UIHelper.CANCEL_FLAG ) void loadData(Object... params) { try{ String serach_text = CryptUtil.base64_url_safe(searchKeyword ); BookModel.BookList l = api.searchBook(serach_text, page); showSuccessResult(l); return; }catch (HttpStatusCodeException e){ showErrorResult(getSherlockActivity(), e.getStatusCode().value()); }catch (Exception e){ handleNoNetWorkError(getSherlockActivity()); } onFailed(); } @Override public boolean onCreateOptionsMenu(android.view.Menu menu) { getMenuInflater().inflate(R.menu.menu_searchbook, menu); menuItemSearch = menu.findItem(R.id.search_button); searchView = (SearchView) MenuItemCompat.getActionView(menuItemSearch); searchView.setQueryHint(getString(R.string.hint_searchbook)); searchView.setSubmitButtonEnabled(true); searchView.setOnQueryTextListener(oQueryTextListener); ImageView mSearchHintIcon = (ImageView) searchView.findViewById(R.id.search_mag_icon); mSearchHintIcon.setVisibility(View.GONE); MenuItemCompat.expandActionView(menuItemSearch); return true; } SearchView.OnQueryTextListener oQueryTextListener = new SearchView.OnQueryTextListener(){ @Override public boolean onQueryTextSubmit(String s) { bookadapter = null; page = 1; searchKeyword = s.trim(); searchView.clearFocus(); MenuItemCompat.collapseActionView(menuItemSearch); swipe_refresh.setRefreshing(true); loadData(); return true; } @Override public boolean onQueryTextChange(String s) { return false; } }; }