package org.carelife.creader.ui.fragment; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.carelife.creader.R; import org.carelife.creader.dao.RssData; import org.carelife.creader.dao.UrlHelper; import org.carelife.creader.support.pulltorefresh.PullToRefreshBase; import org.carelife.creader.support.pulltorefresh.PullToRefreshBase.OnRefreshListener; import org.carelife.creader.support.pulltorefresh.PullToRefreshListView; import org.carelife.creader.ui.activity.WebViewActivity; import org.carelife.creader.ui.adapter.NewsListAdapter; import org.carelife.creader.util.NetworkUtil; import org.carelife.creader.util.ToastUtil; import org.carelife.creader.util.XmlUtil; import android.content.Context; import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; import android.support.v4.app.Fragment; import android.text.format.DateUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.View.OnClickListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TextView; public class NewsFragment extends Fragment { private int index; private List<RssData> adapterData; private NewsListAdapter lAdapter; private TextView badNet; private LinearLayout progressbar; private ToastUtil toast; private PullToRefreshListView mPullRefreshListView; private ListView actualListView; private Context context; public static NewsFragment newInstance(int index) { NewsFragment f = new NewsFragment(); Bundle b = new Bundle(); b.putInt("index", index); f.setArguments(b); return f; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { this.index = getArguments().getInt("index"); toast = ToastUtil.getInstance(getActivity()); context = getActivity(); View v = inflater.inflate(R.layout.newslist, container, false); mPullRefreshListView = (PullToRefreshListView) v .findViewById(R.id.news_list); // Set a listener to be invoked when the list should be refreshed. mPullRefreshListView .setOnRefreshListener(new OnRefreshListener<ListView>() { @Override public void onRefresh( PullToRefreshBase<ListView> refreshView) { String label = DateUtils.formatDateTime(getActivity() .getApplicationContext(), System .currentTimeMillis(), DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_ABBREV_ALL); // Update the LastUpdatedLabel refreshView.getLoadingLayoutProxy() .setLastUpdatedLabel(label); // Do work to refresh the list here. new GetDataTask().execute(0); new GetDataTask().execute(1); new GetDataTask().execute(2); } }); actualListView = mPullRefreshListView.getRefreshableView(); getActivity().registerForContextMenu(actualListView); adapterData = new ArrayList<RssData>(); lAdapter = new NewsListAdapter(getActivity(), adapterData); actualListView.setAdapter(lAdapter); actualListView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { if(null == adapterData.get((int)arg3).getLink()) { toast.setText("�����޼�¼����Ǹ������."); return; } if(NetworkUtil.checkWifiAndGPRS(context)){ Intent intent = new Intent(context, WebViewActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); intent.putExtra("url", adapterData.get((int)arg3).getLink()); context.startActivity(intent); }else{ toast.setText("�ף��������粻���������Ժ����԰�..."); return; } } }); progressbar = (LinearLayout) v.findViewById(R.id.news_progressbar); badNet = (TextView) v.findViewById(R.id.news_badnetwork); badNet.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (NetworkUtil.checkWifiAndGPRS(getActivity())) { progressbar.setVisibility(View.VISIBLE); badNet.setVisibility(View.INVISIBLE); new GetDataTask().execute(0); new GetDataTask().execute(1); new GetDataTask().execute(2); } else { toast.setText("�ף��������粻���������Ժ����԰�..."); } } }); new GetDataTask().execute(0); new GetDataTask().execute(1); new GetDataTask().execute(2); return v; } private class GetDataTask extends AsyncTask<Integer, Void, List<RssData>> { @Override protected List<RssData> doInBackground(Integer... params) { List<RssData> tmp = null; try { tmp = XmlUtil.getNewsXML(UrlHelper.newsurl[index][params[0]]); if (tmp != null && tmp.size() != 0) { RssData r = new RssData(); r.setAuthor(Integer.toString(params[0])); tmp.add(r); return tmp; } } catch (IOException e) { e.printStackTrace(); return null; } return null; } @Override protected void onPostExecute(List<RssData> data) { if (data == null && adapterData == null) { progressbar.setVisibility(View.GONE); mPullRefreshListView.setVisibility(View.INVISIBLE); badNet.setVisibility(View.VISIBLE); } else if (data != null) { badNet.setVisibility(View.INVISIBLE); progressbar.setVisibility(View.GONE); mPullRefreshListView.setVisibility(View.VISIBLE); int index = data.size()-1; RssData r = data.get(index); if(r.getAuthor().equals("0")) adapterData.clear(); data.remove(index); adapterData.addAll(data); lAdapter.notifyDataSetChanged(); } // Call onRefreshComplete when the list has been refreshed. mPullRefreshListView.onRefreshComplete(); super.onPostExecute(data); } } }