package com.emop.client; import android.database.ContentObserver; import android.database.Cursor; import android.graphics.Bitmap; import android.net.Uri; import android.os.Bundle; import android.provider.BaseColumns; import android.support.v4.app.LoaderManager.LoaderCallbacks; import android.support.v4.content.CursorLoader; import android.support.v4.content.Loader; import android.view.Display; import android.view.View; import android.view.View.OnLongClickListener; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ImageView; import android.widget.ImageView.ScaleType; import android.widget.ListView; import android.widget.SimpleCursorAdapter; import android.widget.TextView; import com.baidu.mobstat.StatService; import com.emop.client.provider.Schema; import com.emop.client.provider.model.Topic; import com.tencent.mm.sdk.platformtools.Log; public class GuangActivity extends BaseActivity { private SimpleCursorAdapter adapter = null; private int screenWidth = 0; private ListView listView = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.guang_view); listView = (ListView) findViewById(R.id.activity_list); Display display = getWindowManager().getDefaultDisplay(); screenWidth = display.getWidth(); adapter = new SimpleCursorAdapter(this, R.layout.guang_view_item, null, new String[] {Topic.TITLE, Topic.ITEM_COUNT, Topic.UPDATE_TIME, Topic.FRONT_PIC }, new int[] {R.id.topic_title, R.id.item_count, R.id.topic_update_time, R.id.topic_front_pic} ){ public View getView(int position, View v, ViewGroup p){ v = super.getView(position, v, p); View container = v.findViewById(R.id.main_menu_container); container.getLayoutParams().height = screenWidth / 2; return v; } }; adapter.setViewBinder(new TopicItemViewBinder()); listView.setAdapter(adapter); listView.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View view, int position, long id) { long itemId = adapter.getItemId(position); Log.d(Constants.TAG_EMOP, "click activity item:" + itemId); StatService.onEvent(GuangActivity.this, "click_topic", itemId + "", 1); Uri dataUri = Uri.parse("content://" + Schema.AUTHORITY + "/topic/" + itemId + "/list"); startActivityView(R.layout.topic_item_list, dataUri, null); } }); getSupportLoaderManager().initLoader(0, null, new GLoaderCallback(Schema.TOPIC_LIST)); getContentResolver().registerContentObserver(Schema.TOPIC_LIST, false, new ContentObserver(handler){ public void onChange(boolean selfChange) { Log.d(Constants.TAG_EMOP, "topic list is changed..."); getSupportLoaderManager().getLoader(0).forceLoad(); } }); View v = findViewById(R.id.title); v.setLongClickable(true); v.setOnLongClickListener(new OnLongClickListener(){ @Override public boolean onLongClick(View arg0) { if(!isLoading()){ showLoading("正在加载专题列表..."); Uri u = Schema.TOPIC_LIST.buildUpon().appendQueryParameter("force_refresh", "y").build(); getSupportLoaderManager().restartLoader(0, null, new GLoaderCallback(u)); } return false; } }); } protected void onResume (){ super.onResume(); } protected void onStop(){ super.onStop(); } class TopicItemViewBinder implements SimpleCursorAdapter.ViewBinder{ private int front_pic_index = -1; private int item_count_index = -1; private int update_time_index = -1; private int desc_index = -1; private int order_index = -1; @Override public boolean setViewValue(View view, Cursor cursor, int columnIndex) { if(front_pic_index < 0){ initColumnIndex(cursor); } if(view.getId() == R.id.topic_update_time){ String des = cursor.getString(update_time_index); TextView o = (TextView)view; String[] times = des.split(" "); o.setText(times[0].trim()); return true; }else if(view.getId() == R.id.item_count){ String des = cursor.getString(item_count_index); TextView o = (TextView)view; o.setText(des); return true; }else if(view.getId() == R.id.topic_front_pic){ final String des = cursor.getString(front_pic_index); view.setTag(des); Bitmap bm = client.tmpImgLoader.cache.get(des, screenWidth, true, false); ImageView v = (ImageView)view; //Log.d("xxx", "load xxx:" + des); if(bm != null){ v.setScaleType(ScaleType.CENTER_CROP); v.setImageBitmap(bm); }else { v.setScaleType(ScaleType.CENTER_INSIDE); v.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, screenWidth, true, true); if(newBm != null){ handler.post(new Runnable(){ @Override public void run() { //Log.d("xxx", "load xxx3:" + des); View v = listView.findViewWithTag(des); if(v != null){ ImageView v2 = (ImageView)v; v2.setScaleType(ScaleType.CENTER_CROP); v2.setImageBitmap(newBm); } } }); } } }); } return true; } return false; } private void initColumnIndex(Cursor cursor){ front_pic_index = cursor.getColumnIndex(Topic.FRONT_PIC); item_count_index = cursor.getColumnIndex(Topic.ITEM_COUNT); update_time_index = cursor.getColumnIndex(Topic.UPDATE_TIME); desc_index = cursor.getColumnIndex(Topic.DESC); order_index = cursor.getColumnIndex(Topic.VIEW_ORDER); } } class GLoaderCallback implements LoaderCallbacks<Cursor>{ private Uri data = null; public GLoaderCallback(Uri data){ this.data = data; } @Override public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) { return new CursorLoader(GuangActivity.this, data, new String[] {BaseColumns._ID, Topic.TITLE, Topic.ITEM_COUNT, Topic.DESC, Topic.FRONT_PIC, Topic.UPDATE_TIME, Topic.VIEW_ORDER }, null, null, null); } @Override public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) { closeLoading(); if(cursor != null){ adapter.changeCursor(cursor); adapter.notifyDataSetChanged(); } } @Override public void onLoaderReset(Loader<Cursor> arg0) { //adapter.swapCursor(null); } }; }