package com.mappn.gfan.ui; import java.util.ArrayList; import java.util.HashMap; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.text.TextUtils; import android.view.KeyEvent; import android.view.View; import android.view.View.OnClickListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.FrameLayout; import android.widget.ListView; import android.widget.ProgressBar; import android.widget.TextView; import com.mappn.gfan.Constants; import com.mappn.gfan.R; import com.mappn.gfan.common.ApiAsyncTask; import com.mappn.gfan.common.ApiAsyncTask.ApiRequestListener; import com.mappn.gfan.common.MarketAPI; import com.mappn.gfan.common.widget.AppListAdapter; import com.mappn.gfan.common.widget.LazyloadListActivity; import com.mappn.gfan.common.widget.LoadingDrawable; public class ProductListActivity extends LazyloadListActivity implements ApiRequestListener, OnItemClickListener, OnClickListener { // Loading private FrameLayout mLoading; private ProgressBar mProgress; private TextView mNoData; private AppListAdapter mAdapter; private String mCategory; private int mSortType; private String mCategoryId; private int mTotalSize; @Override public boolean doInitView(Bundle savedInstanceState) { Intent intent = getIntent(); if(intent != null) { mCategory = intent.getStringExtra(Constants.EXTRA_CATEGORY); if (TextUtils.isEmpty(mCategory)) { mSortType = intent.getIntExtra(Constants.EXTRA_SORT_TYPE, 1); mCategoryId = intent.getStringExtra(Constants.EXTRA_CATEGORY_ID); } setContentView(R.layout.common_list_view); int maxSize = intent.getIntExtra(Constants.EXTRA_MAX_ITEMS, 0); if (maxSize > 0) { mTotalSize = maxSize; } mList = (ListView) findViewById(android.R.id.list); mLoading = (FrameLayout) findViewById(R.id.loading); mProgress = (ProgressBar) mLoading.findViewById(R.id.progressbar); mProgress.setIndeterminateDrawable(new LoadingDrawable(getApplicationContext())); mProgress.setVisibility(View.VISIBLE); mNoData = (TextView) mLoading.findViewById(R.id.no_data); mNoData.setOnClickListener(this); mList.setEmptyView(mLoading); mList.setOnItemClickListener(this); lazyload(); return true; } else { return false; } } @Override public void doLazyload() { if (Constants.ORDER_TYPE_INSTALLED_NUM == mSortType) { MarketAPI.getProducts(getApplicationContext(), this, getItemsPerPage(), getStartIndex(), mSortType, mCategoryId); } else if (Constants.ORDER_TYPE_TIME == mSortType) { MarketAPI.getProducts(getApplicationContext(), this, getItemsPerPage(), getStartIndex(), mSortType, mCategoryId); } else if (Constants.CATEGORY_GROW.equals(mCategory)) { MarketAPI.getGrowFast(getApplicationContext(), this, getStartIndex(), getItemsPerPage()); } else { MarketAPI.getRankByCategory(getApplicationContext(), this, getStartIndex(), getItemsPerPage(), mCategory); } } @Override public AppListAdapter doInitListAdapter() { mAdapter = new AppListAdapter(getApplicationContext(), null, R.layout.common_product_list_item, new String[] { Constants.KEY_PRODUCT_ICON_URL, Constants.KEY_PRODUCT_NAME, Constants.KEY_PRODUCT_AUTHOR, Constants.KEY_PRODUCT_IS_STAR, Constants.KEY_PRODUCT_RATING, Constants.KEY_PRODUCT_DOWNLOAD }, new int[] { R.id.iv_logo, R.id.tv_name, R.id.tv_description, R.id.iv_star, R.id.rb_app_rating, R.id.tv_download }); mAdapter.setProductList(); if (!TextUtils.isEmpty(mCategory)) { // 排行榜列表 mAdapter.setRankList(); } return mAdapter; } @Override protected int getItemCount() { return mTotalSize; } @SuppressWarnings("unchecked") @Override public void onSuccess(int method, Object obj) { HashMap<String, Object> result = (HashMap<String, Object>) obj; if (mTotalSize <= 0) { mTotalSize = (Integer) result.get(Constants.KEY_TOTAL_SIZE); } mAdapter.addData((ArrayList<HashMap<String, Object>>) result .get(Constants.KEY_PRODUCT_LIST)); setLoadResult(true); } @Override public void onError(int method, int statusCode) { if(statusCode == ApiAsyncTask.BUSSINESS_ERROR) { // 没有数据 } else { // 超时 mNoData.setVisibility(View.VISIBLE); mProgress.setVisibility(View.GONE); } setLoadResult(false); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { Activity parent = getParent(); if(parent != null) { return parent.onKeyDown(keyCode, event); } return super.onKeyDown(keyCode, event); } @SuppressWarnings("unchecked") @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // 去产品详细页 HashMap<String, Object> item = (HashMap<String, Object>) mAdapter.getItem(position); String pid = (String) item.get(Constants.KEY_PRODUCT_ID); Intent detailIntent = new Intent(getApplicationContext(), PreloadActivity.class); detailIntent.putExtra(Constants.EXTRA_PRODUCT_ID, pid); startActivity(detailIntent); } @Override public void onClick(View v) { // 重试 mProgress.setVisibility(View.VISIBLE); mNoData.setVisibility(View.GONE); lazyload(); } }