package cn.fanfan.topic; import java.util.ArrayList; import java.util.List; import org.apache.http.Header; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import com.loopj.android.http.AsyncHttpClient; import com.loopj.android.http.AsyncHttpResponseHandler; import com.loopj.android.http.RequestParams; import cn.fanfan.common.Config; import cn.fanfan.common.FanfanSharedPreferences; import cn.fanfan.common.GlobalVariables; import cn.fanfan.main.MainActivity; import cn.fanfan.main.R; import cn.fanfan.topic.imageload.ImageDownLoader; import cn.fanfan.topic.imageload.ImageDownLoader.onImageLoaderListener; import android.app.Activity; import android.content.Intent; import android.graphics.Bitmap; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AbsListView; import android.widget.AbsListView.OnScrollListener; import android.widget.AdapterView; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; import android.widget.AdapterView.OnItemClickListener; import android.widget.ListView; public class TopicFragment extends Fragment { private List<TopicModel> topicModels; private ListView listView; private TopicFragmenAdapter adapter; private boolean isFirstEnter; private int mFirstVisibleItem; private int mVisibleItemCount; private int totalItem; private ImageDownLoader mImageDownLoader; private String uid; private int per_page = 10; private int currentPage = 1; private int allPages = 1; private LinearLayout footerLinearLayout; private TextView footText; private int isFocus; private Bundle bundle; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // TODO Auto-generated method stub View view = inflater.inflate(R.layout.fragment_topic, container, false); final FanfanSharedPreferences sharedPreferences = new FanfanSharedPreferences( getActivity()); // uid = sharedPreferences.getUid("1"); Intent intent = getActivity().getIntent(); uid = intent.getStringExtra("uid"); if (uid == null) { uid = sharedPreferences.getUid("10"); } bundle = getArguments(); if (bundle == null) { isFocus = GlobalVariables.FOCUS_TOPIC; } else { isFocus = bundle.getInt("isFocus", GlobalVariables.FOCUS_TOPIC); } topicModels = new ArrayList<TopicModel>(); mImageDownLoader = new ImageDownLoader(getActivity()); footerLinearLayout = (LinearLayout) LayoutInflater.from(getActivity()) .inflate(R.layout.next_page_footer, null); footText = (TextView) footerLinearLayout.findViewById(R.id.footer_text); isFirstEnter = true; listView = (ListView) view.findViewById(R.id.fragment_topic_list); listView.addFooterView(footerLinearLayout); listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // TODO Auto-generated method stub if (position < topicModels.size()) { Intent intent = new Intent(getActivity(), TopicDetailFragmentActivity.class); intent.putExtra("topic_id", topicModels.get(position) .getTopicId()); intent.putExtra("isFocus", isFocus); startActivity(intent); } } }); listView.setOnScrollListener(new OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { // TODO Auto-generated method stub if (scrollState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE && (mFirstVisibleItem + mVisibleItemCount == totalItem)) { if (currentPage <= allPages) { getTopicModels(uid); } else { footText.setText("û�и���������"); // footerLinearLayout.setVisibility(View.GONE); // listView.removeFooterView(footerLinearLayout); } } if (scrollState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE) { showImage(mFirstVisibleItem, mVisibleItemCount); } else { cancleTask(); } } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { // TODO Auto-generated method stub mFirstVisibleItem = firstVisibleItem; mVisibleItemCount = visibleItemCount; totalItem = totalItemCount; // ���������Ϊ�״ν���������������� if (isFirstEnter && visibleItemCount > 0) { showImage(mFirstVisibleItem, mVisibleItemCount); isFirstEnter = false; } } }); getTopicModels(uid); return view; } private void showImage(int firstVisibleItem, int visibleItemCount) { // ע��firstVisibleItem + visibleItemCount-1 = 20 1���а�����footview�����һ��ҪС�ģ� for (int i = firstVisibleItem; i < firstVisibleItem + visibleItemCount - 1; i++) { String mImageUrl = topicModels.get(i).getImageUrl(); if (!mImageUrl.equals("")) { mImageUrl = Config.getValue("imageBaseUrl") + mImageUrl; final ImageView mImageView = (ImageView) listView .findViewWithTag(mImageUrl); mImageDownLoader.getBitmap(mImageUrl, new onImageLoaderListener() { public void onImageLoader(Bitmap bitmap, String url) { if (mImageView != null && bitmap != null) { mImageView.setImageBitmap(bitmap); } } }); } else { continue; } } } public void cancleTask() { mImageDownLoader.cacelTask(); } private void getTopicModels(String uid) { RequestParams params = new RequestParams(); String url = ""; if (isFocus == GlobalVariables.FOCUS_TOPIC) { params.put("uid", uid); url = Config.getValue("Focus_topic"); } else { url = Config.getValue("Hot_topic"); } params.put("page", currentPage); params.put("per_page", per_page); AsyncHttpClient client = new AsyncHttpClient(); // PersistentCookieStore cookieStore = new // PersistentCookieStore(getActivity()); // client.setCookieStore(cookieStore); client.get(url, params, new AsyncHttpResponseHandler() { @Override public void onStart() { // TODO Auto-generated method stub super.onStart(); // topicModels = new ArrayList<TopicModel>(); } @Override public void onSuccess(int arg0, Header[] arg1, byte[] arg2) { // TODO Auto-generated method stub try { JSONObject jsonObject = new JSONObject(new String(arg2)); int errno = jsonObject.getInt("errno"); if (errno == -1) { String err = jsonObject.getString("err"); Toast.makeText(getActivity(), err, Toast.LENGTH_SHORT) .show(); } else { String rsm = jsonObject.getString("rsm"); JSONObject jsonObject2 = new JSONObject(rsm); String total_rows = jsonObject2.getString("total_rows"); if (currentPage == 1) { int totalPages = Integer.parseInt(total_rows); int a = totalPages % per_page; if (a == 0) { allPages = totalPages / per_page; } else { allPages = totalPages / per_page + 1; } } String topics_list = jsonObject2.getString("rows"); JSONArray jsonArray = new JSONArray(topics_list); for (int i = 0; i < jsonArray.length(); i++) { TopicModel topicModel = new TopicModel(); JSONObject jsonObject3 = jsonArray.getJSONObject(i); String topic_id = jsonObject3.getString("topic_id"); String topic_title = jsonObject3 .getString("topic_title"); String topic_description = jsonObject3 .getString("topic_description"); String topic_pic = jsonObject3 .getString("topic_pic"); topicModel.setTopicId(topic_id); topicModel.setTopicSummary(topic_description); topicModel.setTopicTitle(topic_title); topicModel.setImageUrl(topic_pic); topicModels.add(topicModel); } if (currentPage == 1) { adapter = new TopicFragmenAdapter(getActivity(), topicModels, mImageDownLoader); listView.setAdapter(adapter); if (topicModels.size() < per_page) { footText.setText("û�и��������ˣ�"); } currentPage++; } else { adapter.notifyDataSetChanged(); currentPage++; } } } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public void onFailure(int arg0, Header[] arg1, byte[] arg2, Throwable arg3) { // TODO Auto-generated method stub } }); } @Override public void onAttach(Activity activity) { super.onAttach(activity); if (bundle != null) { ((MainActivity) activity).onSectionAttached(getArguments().getInt( "position")); } } }