package com.cnblogs.android; import java.util.ArrayList; import java.util.List; import android.app.ProgressDialog; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.res.Resources; import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; import android.view.ContextMenu; import android.view.LayoutInflater; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ContextMenu.ContextMenuInfo; import android.view.View.OnClickListener; import android.view.View.OnCreateContextMenuListener; import android.widget.AbsListView; import android.widget.AdapterView; import android.widget.Button; import android.widget.ImageButton; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.ProgressBar; import android.widget.TextView; import android.widget.Toast; import android.widget.AbsListView.OnScrollListener; import android.widget.AdapterView.OnItemClickListener; import com.cnblogs.android.adapter.MyFavListAdapter; import com.cnblogs.android.controls.PullToRefreshListView; import com.cnblogs.android.controls.PullToRefreshListView.OnRefreshListener; import com.cnblogs.android.core.Config; import com.cnblogs.android.core.FavListHelper; import com.cnblogs.android.dal.BlogDBHelp; import com.cnblogs.android.entity.Blog; import com.cnblogs.android.entity.FavList; import com.cnblogs.android.ui.tab1.BlogDetailView; import com.cnblogs.android.utility.NetHelper; /** * �ҵ��ղ� * @author walkingp * @date 2012-3-24 */ public class MyFavActivity extends SuperView{ List<Blog> listBlog = new ArrayList<Blog>(); List<FavList> listFav=new ArrayList<FavList>(); int pageIndex = 1;// ҳ�� TextView txtAppTitle; ListView listView; private MyFavListAdapter adapter;// ����Դ ProgressBar blogBody_progressBar;// ����ListView���ؿ� ImageButton blog_refresh_btn;// ˢ�°�ť ProgressBar blog_progress_bar;// ���ذ�ť Button btnBack;//���ذ�ť private LinearLayout viewFooter;// footer view TextView tvFooterMore;// �ײ�������ʾ ProgressBar list_footer_progress;// �ײ������� Resources res;// ��Դ private ProgressDialog progressDialog; private int lastItem; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.setContentView(R.layout.author_order_recommend_news_layout); res = this.getResources(); InitialControls(); BindControls(); new PageTask(0, true).execute(); //ע��㲥 UpdateListViewReceiver receiver=new UpdateListViewReceiver(); IntentFilter filter=new IntentFilter(); filter.addAction("android.cnblogs.com.update_favlist"); registerReceiver(receiver, filter); } /** * ��ʼ���б� */ private void InitialControls() { txtAppTitle=(TextView)findViewById(R.id.txtAppTitle); txtAppTitle.setText("�ҵ��ղ�"); btnBack=(Button)findViewById(R.id.btn_back); btnBack.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { finish(); } }); listView = (ListView) findViewById(R.id.blog_list); blogBody_progressBar = (ProgressBar) findViewById(R.id.blogList_progressBar); blogBody_progressBar.setVisibility(View.VISIBLE); blog_refresh_btn = (ImageButton) findViewById(R.id.blog_refresh_btn); blog_progress_bar = (ProgressBar) findViewById(R.id.blog_progressBar); // �ײ�view LayoutInflater mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); viewFooter = (LinearLayout) mInflater.inflate(R.layout.listview_footer, null, false); } /** * ���¼� */ private void BindControls() { // ˢ�� blog_refresh_btn.setOnClickListener(new OnClickListener() { public void onClick(View v) { new PageTask(1, true).execute(); } }); // ����ˢ�� ((PullToRefreshListView) listView) .setOnRefreshListener(new OnRefreshListener() { @Override public void onRefresh() { new PageTask(-1, true).execute(); } }); // ����ˢ�� listView.setOnScrollListener(new OnScrollListener() { /** * ���������һ�� */ @Override public void onScrollStateChanged(AbsListView view, int scrollState) { if (lastItem == adapter.getCount() && scrollState == OnScrollListener.SCROLL_STATE_IDLE) { pageIndex = pageIndex + 1; new PageTask(pageIndex, false).execute(); } } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { lastItem = firstVisibleItem - 2 + visibleItemCount; } });// �����ת listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View v, int position, long id) { RedirectDetailActivity(v); } }); // �����¼� listView.setOnCreateContextMenuListener(new OnCreateContextMenuListener() { @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.my_fav_contextmenu, menu); menu.setHeaderTitle(R.string.menu_bar_title); } }); } /** * ��ת������ * * @param v */ private void RedirectDetailActivity(View v) { Intent intent = new Intent(); try { // ���ݲ��� intent.setClass(MyFavActivity.this, BlogDetailView.class); Bundle bundle = new Bundle(); TextView tvBlogId = (TextView) (v .findViewById(R.id.recommend_text_id)); TextView tvBlogTitle = (TextView) (v .findViewById(R.id.recommend_text_title)); TextView tvBlogAuthor = (TextView) (v .findViewById(R.id.recommend_text_author)); TextView tvBlogDate = (TextView) (v .findViewById(R.id.recommend_text_date)); TextView tvBlogUrl = (TextView) (v .findViewById(R.id.recommend_text_url)); TextView tvBlogViewCount = (TextView) (v .findViewById(R.id.recommend_text_view)); TextView tvBlogCommentCount = (TextView) (v .findViewById(R.id.recommend_text_comments)); TextView tvBlogDomain = (TextView) (v .findViewById(R.id.recommend_text_domain)); int blogId = Integer.parseInt(tvBlogId.getText().toString()); String blogTitle = tvBlogTitle.getText().toString(); String blogAuthor = tvBlogAuthor.getText().toString(); String blogDate = tvBlogDate.getText().toString(); String blogUrl = tvBlogUrl.getText().toString(); String blogDomain = tvBlogDomain.getText().toString(); int viewsCount = Integer.parseInt(tvBlogViewCount.getText() .toString()); int commentCount = Integer.parseInt(tvBlogCommentCount.getText() .toString()); bundle.putInt("blogId", blogId); bundle.putString("blogTitle", blogTitle); bundle.putString("author", blogAuthor); bundle.putString("date", blogDate); bundle.putString("blogUrl", blogUrl); bundle.putInt("view", viewsCount); bundle.putInt("comment", commentCount); bundle.putString("blogDomain", blogDomain); Log.d("blogId", String.valueOf(blogId)); intent.putExtras(bundle); startActivity(intent); } catch (Exception ex) { ex.printStackTrace(); } } // �����˵���Ӧ���� @Override public boolean onContextItemSelected(MenuItem item) { int itemIndex = item.getItemId(); AdapterView.AdapterContextMenuInfo menuInfo = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo(); View v = menuInfo.targetView; switch (itemIndex) { case R.id.menu_unrss://ȡ������ default: //��ʾProgressDialog progressDialog = ProgressDialog.show(MyFavActivity.this, "ɾ���ղ�", "����ɾ���ղ��У����Ժ�", true, false); TextView tvId=(TextView)v.findViewById(R.id.recommend_text_id); int contentId=Integer.valueOf(tvId.getText().toString()); FavList.EnumContentType contentType=FavList.EnumContentType.Blog; try{ FavListHelper.RemoveFav(contentId,contentType,getApplicationContext()); Toast.makeText(getApplicationContext(), R.string.unfav_succ, Toast.LENGTH_SHORT).show(); }catch(Exception ex){ Toast.makeText(getApplicationContext(), R.string.unfav_fail, Toast.LENGTH_SHORT).show(); } progressDialog.dismiss(); // �㲥 Intent intent = new Intent(); Bundle bundle = new Bundle(); bundle.putInt("contentId",contentId); bundle.putInt("contentType", contentType.ordinal()); bundle.putBoolean("isfav", false); intent.putExtras(bundle); intent.setAction("android.cnblogs.com.update_favlist"); sendBroadcast(intent); } return super.onContextItemSelected(item); } /** * ���߳������������������ء���ʼ�������ؼ��ء�ˢ�£� * */ public class PageTask extends AsyncTask<String, Integer, List<Blog>> { boolean isRefresh = false; int curPageIndex = 0; public PageTask(int page, boolean isRefresh) { curPageIndex = page; this.isRefresh = isRefresh; } protected List<Blog> doInBackground(String... params) { boolean isNetworkAvailable = NetHelper.networkIsAvailable(getApplicationContext()); int _pageIndex = curPageIndex; if (_pageIndex <= 0) { _pageIndex = 1; } FavList.EnumContentType contentType=FavList.EnumContentType.Blog; if (isNetworkAvailable) {// ��������� List<Blog> listBlogTmp=new ArrayList<Blog>(); List<FavList> listFavNew = FavListHelper.GetFavListByPage(_pageIndex, contentType, getApplicationContext()); switch (curPageIndex) { case -1 :// ����\ List<FavList> listTmp = new ArrayList<FavList>(); if (listBlog != null && listBlog.size() > 0) {// ������ҳ������ʱ if (listFavNew != null && listFavNew.size() > 0) { int size = listFavNew.size(); for (int i = 0; i < size; i++) { if (!listBlog.contains(listFavNew.get(i))) {// ��������ظ� listTmp.add(listFavNew.get(i)); } } } } listFav =listTmp; case 0 :// �״μ��� case 1 :// ˢ�� if (listFavNew != null && listFavNew.size() > 0) { listFav= listFavNew; } break; default :// ���� List<FavList> listT = new ArrayList<FavList>(); if (listBlog != null && listBlog.size() > 0) {// ������ҳ������ʱ if (listFavNew != null && listFavNew.size() > 0) { int size = listFavNew.size(); for (int i = 0; i < size; i++) { if (!listBlog.contains(listFavNew.get(i))) {// ��������ظ� listT.add(listFavNew.get(i)); } } } } listFav= listT; } for(int i=0,len=listFav.size();i<len;i++){ BlogDBHelp helper=new BlogDBHelp(getApplicationContext()); Blog entity=helper.GetBlogEntity(listFav.get(i).GetContentId()); listBlogTmp.add(entity); } return listBlogTmp; } return null; } @Override protected void onCancelled() { super.onCancelled(); } /** * �������� */ @Override protected void onPostExecute(List<Blog> result) { // ���Ͻ� blog_progress_bar.setVisibility(View.GONE); blog_refresh_btn.setVisibility(View.VISIBLE); // ���粻���ò��ұ���û�б������� if (result == null || result.size() == 0) {// û�������� ((PullToRefreshListView) listView).onRefreshComplete(); if (!NetHelper.networkIsAvailable(getApplicationContext()) && curPageIndex > 1) {// ��������û������ Toast.makeText(getApplicationContext(), R.string.sys_network_error, Toast.LENGTH_SHORT) .show(); // listView.removeFooterView(viewFooter); } return; } int size = result.size(); if (size >= Config.BLOG_PAGE_SIZE && listView.getFooterViewsCount() == 0) { listView.addFooterView(viewFooter); } if (curPageIndex == -1) {// ����ˢ�� adapter.InsertData(result); } else if (curPageIndex == 0) {// �״μ��� listBlog = result;// dbHelper.GetTopBlogList(); blogBody_progressBar.setVisibility(View.GONE); adapter = new MyFavListAdapter(getApplicationContext(),listBlog); listView.setAdapter(adapter); // ���ݲ��� ((PullToRefreshListView) listView).SetDataRow(listBlog.size()); ((PullToRefreshListView) listView).SetPageSize(Config.BLOG_PAGE_SIZE); } else if (curPageIndex == 1) {// ˢ�� try {// ������ҳ��������أ���ˢ�°�ť if (adapter != null && adapter.GetData() != null) { adapter.GetData().clear(); adapter.AddMoreData(result); } else if (result != null) { adapter = new MyFavListAdapter(getApplicationContext(),result); listView.setAdapter(adapter); } blogBody_progressBar.setVisibility(View.GONE); } catch (Exception ex) { // Log.e("BlogActivity", ex.getMessage()); } } else {// ���� adapter.AddMoreData(result); } if (isRefresh) {// ˢ��ʱ���� ((PullToRefreshListView) listView).onRefreshComplete(); } } @Override protected void onPreExecute() { // ��������� if (listView.getCount() == 0) { blogBody_progressBar.setVisibility(View.VISIBLE); } // ���Ͻ� blog_progress_bar.setVisibility(View.VISIBLE); blog_refresh_btn.setVisibility(View.GONE); if (!isRefresh) {// �ײ��ؼ���ˢ��ʱ�������� TextView tvFooterMore = (TextView) findViewById(R.id.tvFooterMore); tvFooterMore.setText(R.string.pull_to_refresh_refreshing_label); tvFooterMore.setVisibility(View.VISIBLE); ProgressBar list_footer_progress = (ProgressBar) findViewById(R.id.list_footer_progress); list_footer_progress.setVisibility(View.VISIBLE); } } @Override protected void onProgressUpdate(Integer... values) { } } /** * ���ɾ�����ݣ��㲥�� * @author Administrator * */ public class UpdateListViewReceiver extends BroadcastReceiver{ @Override public void onReceive(Context content, Intent intent) { Bundle bundle=intent.getExtras(); int contentId=bundle.getInt("contentId"); FavList.EnumContentType contentType=FavList.EnumContentType.values()[bundle.getInt("contentType",0)]; try{ boolean isFav=bundle.getBoolean("isfav"); Object obj=FavListHelper.GetFavRefEntity(contentId, contentType, getApplicationContext()); if(isFav){ List<Blog> list=new ArrayList<Blog>(); list.add((Blog)obj); adapter.AddMoreData(list); }else{ adapter.RemoveData((Blog)obj); } }catch(Exception ex){ Log.e("favActivity", ex.getMessage()); } } } }