package com.emop.client.fragment; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.res.TypedArray; import android.database.ContentObserver; import android.database.Cursor; import android.graphics.Bitmap; import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.provider.SyncStateContract.Columns; import android.support.v4.app.ListFragment; import android.support.v4.app.LoaderManager.LoaderCallbacks; import android.support.v4.content.CursorLoader; import android.support.v4.content.Loader; import android.support.v4.widget.CursorAdapter; import android.util.AttributeSet; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.Button; import android.widget.GridView; import android.widget.ImageView; import android.widget.ImageView.ScaleType; import android.widget.ListView; import android.widget.TextView; import com.emop.client.Constants; import com.emop.client.MutilFragmentActivity; import com.emop.client.R; import com.emop.client.fragment.adapter.CreditAdapter; import com.emop.client.io.FmeiClient; import com.emop.client.provider.JSONCursor; import com.emop.client.provider.Schema; import com.emop.client.provider.model.Shop; import com.emop.client.wxapi.DensityUtil; public class ShopListFragment extends ListFragment{ public int cateId = 0; private CursorAdapter adapter = null; protected Handler handler = new Handler(); private String dataSource = ""; private String dataFrom = ""; private boolean isRunning = false; public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedState){ View v = inflater.inflate(R.layout.shop_list_view, container, false); if(cateId > 0){ v.setTag(cateId); } ListView listView = (ListView)v.findViewById(android.R.id.list); listView.setCacheColorHint(0); return v; } @Override public void onInflate(Activity activity, AttributeSet attrs, Bundle savedInstanceState) { super.onInflate(activity, attrs, savedInstanceState); TypedArray a = activity.obtainStyledAttributes(attrs, R.styleable.FragmentArguments); dataFrom = a.getString(R.styleable.FragmentArguments_data_source); a.recycle(); } public void reload(){ initParam(); Log.d("xx", "reload shop list...." + dataSource); getLoaderManager().restartLoader(0, null, callbacks); } public void onResume(){ super.onResume(); isRunning = true; } public void onPause(){ super.onPause(); isRunning = false; } private void initParam(){ final FmeiClient client = FmeiClient.getInstance(null); Bundle args = this.getArguments(); if(args != null){ dataSource = args.getString("uri"); } Log.d("xx", "shop list froms:" + dataFrom); if(dataFrom != null && dataFrom.equals("fav")){ String myFavId = client.getFavoriteId(); if(myFavId == null || myFavId.trim().length() == 0){ Log.d("xx", "not found myfav id...."); return; } dataSource = Schema.SHOP_LIST.toString(); } } public void onActivityCreated(Bundle savedState){ super.onActivityCreated(savedState); final FmeiClient client = FmeiClient.getInstance(null); initParam(); final int picWidth = DensityUtil.dip2px(getActivity(), 80); adapter = new CursorAdapter(getActivity(), JSONCursor.EMPTY, true){ private int titleIndex = -1, nickIndex, logoIndex, descIndex, shopTypeIndex, shopIdIndex, creditIndex; @Override public void bindView(View v, Context ctx, Cursor c) { if(titleIndex < 0){ initCursorIndex(c); } if(shopIdIndex >= 0){ v.setId(c.getInt(shopIdIndex)); } Items items = (Items)v.getTag(); if(items == null){ items = new Items(v); v.setTag(items); } if(items.shopTitle != null && titleIndex >= 0){ items.shopTitle.setText(c.getString(titleIndex)); } if(items.userNick != null && nickIndex >= 0){ items.userNick.setText(c.getString(nickIndex)); } if(items.shopDesc != null && descIndex >= 0){ items.shopDesc.setText(c.getString(descIndex)); } String shopType = ""; if(items.shopTypeLogo != null && shopTypeIndex >= 0){ shopType = c.getString(shopTypeIndex); if(shopType.equals("B")){ items.shopTypeLogo.setVisibility(View.VISIBLE); if(items.credit != null){ items.credit.setVisibility(View.GONE); } }else { items.shopTypeLogo.setVisibility(View.GONE); } } if(items.credit != null && creditIndex >= 0 && shopType.equals("C")){ int creditLevel = c.getInt(creditIndex); items.credit.setAdapter(new CreditAdapter(getActivity(), creditLevel)); items.credit.setVisibility(View.VISIBLE); items.credit.setVerticalScrollBarEnabled(false); items.credit.setHorizontalScrollBarEnabled(false); } if(items.shopLogo != null && logoIndex >= 0){ final String des = c.getString(logoIndex); items.shopLogo.setTag(des); Bitmap bm = client.tmpImgLoader.cache.get(des, picWidth, false, false); ImageView img = (ImageView)items.shopLogo; if(bm != null){ img.setScaleType(ScaleType.CENTER_CROP); img.setImageBitmap(bm); }else { img.setScaleType(ScaleType.CENTER_INSIDE); img.setImageResource(R.drawable.loading); client.tmpImgLoader.runTask(new Runnable(){ @Override public void run() { //Log.d("xxx", "load xxx2:" + des); final Bitmap newBm = client.tmpImgLoader.cache.get(des, 80, false, true); if(newBm != null){ handler.post(new Runnable(){ @Override public void run() { if(isRunning){ View v = getListView().findViewWithTag(des); if(v != null){ ImageView v2 = (ImageView)v; v2.setScaleType(ScaleType.CENTER_CROP); v2.setImageBitmap(newBm); } } } }); } } }); } } if(items.addToFav != null){ items.addToFav.setOnClickListener(addToFavorite); } } @Override public View newView(Context ctx, Cursor c, ViewGroup root) { Log.d("xx", "newView finishied, index:" + c.getPosition()); View v = getLayoutInflater(null).inflate(R.layout.shop_list_item, null); v.setTag(new Items(v)); return v; } private void initCursorIndex(Cursor c){ titleIndex = c.getColumnIndex(Shop.SHOP_TITLE); nickIndex = c.getColumnIndex(Shop.USER_NICK); logoIndex = c.getColumnIndex(Shop.SHOP_LOGO); descIndex = c.getColumnIndex(Shop.SHOP_DESC); shopTypeIndex = c.getColumnIndex(Shop.SHOP_TYPE); shopIdIndex = c.getColumnIndex(Shop.SHOP_ID); creditIndex = c.getColumnIndex(Shop.SHOP_CREDIT); } }; setListAdapter(adapter); if(dataSource != null && dataSource.length() > 0){ getLoaderManager().initLoader(0, null, callbacks); if(Uri.parse(dataSource) != null){ Log.d(Constants.TAG_EMOP, "registerContent:" + dataSource); getActivity().getContentResolver().registerContentObserver(Uri.parse(dataSource), false, new ContentObserver(new Handler()){ public void onChange(boolean selfChange) { if(isRunning){ Log.d(Constants.TAG_EMOP, "shop list is changed:" + dataSource); getLoaderManager().getLoader(0).forceLoad(); } } }); } } } protected LoaderCallbacks<Cursor> callbacks = new LoaderCallbacks<Cursor>() { @Override public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) { return new CursorLoader(getActivity(), Uri.parse(dataSource), new String[] {Columns._ID, Shop.SHOP_ID, Shop.SHOP_TITLE, Shop.USER_NICK, Shop.SHOP_TYPE, Shop.SHOP_DESC, Shop.SHOP_LOGO, Shop.SHOP_CREDIT }, null, null, null); } @Override public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) { if(cursor != null){ Log.d("xx", "onLoad finishied, count:" + cursor.getCount()); if(cursor.getCount() == 0){ showNoItems(); } adapter.swapCursor(cursor); } } @Override public void onLoaderReset(Loader<Cursor> arg0) { adapter.swapCursor(null); } }; public void onListItemClick(ListView l, View v, int position, long id){ //Log.d("emop", "onListItemClick....."); Log.d("emop", "onItemClick, id:" + id); Intent intent = new Intent(); intent.setClass(getActivity(), MutilFragmentActivity.class); //intent.set intent.putExtra("view_id", new int[]{R.layout.shop_detail}); intent.putExtra("shop_id", id + ""); startActivity(intent); } private void showNoItems(){ View v = getView().findViewById(R.id.progressbar_loading); if(v != null){ v.setVisibility(View.GONE); } v = getView().findViewById(R.id.no_items); if(v != null){ v.setVisibility(View.VISIBLE); } } private OnClickListener addToFavorite = new OnClickListener(){ @Override public void onClick(View v) { Log.d("emop", "click view:" + v); } }; class Items{ TextView shopTitle = null; TextView userNick = null; ImageView shopLogo = null; TextView shopDesc = null; ImageView shopTypeLogo = null; Button addToFav = null; GridView credit = null; public Items(View root){ shopTitle = (TextView)root.findViewById(R.id.shop_title); userNick = (TextView)root.findViewById(R.id.user_nick); shopLogo = (ImageView)root.findViewById(R.id.shop_logo); shopDesc = (TextView)root.findViewById(R.id.shop_desc); shopTypeLogo = (ImageView)root.findViewById(R.id.shop_type_logo); addToFav = (Button)root.findViewById(R.id.add_to_favorite); credit = (GridView)root.findViewById(R.id.taobao_credit); } } }