package com.v2ex.v2droid; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import org.holoeverywhere.LayoutInflater; import org.holoeverywhere.app.Activity; import org.holoeverywhere.app.Fragment; import org.holoeverywhere.widget.ProgressBar; import org.holoeverywhere.widget.TextView; import org.holoeverywhere.widget.Toast; import org.jsoup.nodes.Document; import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.webkit.WebSettings.LayoutAlgorithm; import android.webkit.WebView; import android.widget.AdapterView; import android.widget.ListView; import android.widget.AdapterView.OnItemClickListener; import com.actionbarsherlock.view.Menu; import com.actionbarsherlock.view.MenuInflater; import com.actionbarsherlock.view.MenuItem; public class MessageFragment extends Fragment { private static MessageFragment instance; private ProgressBar progressBar; ArrayList<HashMap<String, String>> messageList = null; ArrayList<HashMap<String, String>> tempList = null; private ListView messageListView; MessageAdapter mMessagesAdapter = null; int recentPageNum = 1; Document doc; private MenuItem refresh; boolean bRefresh = false; boolean bIsLastPage = false; boolean bNotLoag = false; public static MessageFragment getInstance() { if (MessageFragment.instance == null) { return new MessageFragment(); } return MessageFragment.instance; } public MessageFragment() { MessageFragment.instance = this; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setRetainInstance(true); setHasOptionsMenu(true); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_message); } @Override public void onViewCreated(View view) { super.onViewCreated(view); progressBar = (ProgressBar) view .findViewById(R.id.progress_bar); progressBar.setVisibility(View.GONE); if (messageList==null) { messageList = new ArrayList<HashMap<String, String>>(); tempList = new ArrayList<HashMap<String, String>>(); new GetDataTask().execute(); mMessagesAdapter = new MessageAdapter((Activity)getActivity(), messageList); progressBar.setVisibility(View.GONE); } messageListView = (ListView) view .findViewById(R.id.message_list); messageListView.setAdapter(mMessagesAdapter); messageListView.setFocusable(true); messageListView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { if (messageList.get(position).get( ApiClient.KEY_MESSAGE) == MainActivity.MORE_TAG) { progressBar.setVisibility(View.VISIBLE); new GetDataTask().execute(); } else { String tid = messageList.get(position).get( TopicFragment.KEY_ID); Intent contentIntent = new Intent(Intents.SHOW_CONTENT); contentIntent.putExtra("EXTRA_TOPIC_ID", tid); contentIntent.putExtra("EXTRA_NODE_NAME", ""); getActivity().startActivity(contentIntent); } } }); } @Override public void onCreateOptionsMenu( Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.fragment_message, menu); refresh = menu.findItem(R.id.refresh); if (messageList==null || messageList.isEmpty()) { refresh.setActionView(R.layout.refresh); } } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: ((MainActivity)getActivity()).toggle(); break; case R.id.refresh: refresh.setActionView(R.layout.refresh); onRefresh(); break; default: return super.onOptionsItemSelected(item); } return true; } public void onRefresh() { refresh.setActionView(R.layout.refresh); bRefresh = true; bNotLoag = false; bIsLastPage = false; recentPageNum = 1; new GetDataTask().execute(); } private class GetDataTask extends AsyncTask<Void, Void, String[]> { @Override protected String[] doInBackground(Void... params) { String[] s = { "", "" }; if (!bIsLastPage) { String url = "http://v2ex.com/notifications?p=" + recentPageNum; AppContext ac = (AppContext) getActivity().getApplication(); Document doc; tempList.clear(); try { doc = ApiClient.get(ac, url, URLs.HOST).parse(); bIsLastPage = ApiClient.getMessages(ac, doc, tempList); } catch (IOException e) { } } else { bNotLoag = true; } return s; } @Override protected void onPostExecute(String[] result) { progressBar.setVisibility(View.GONE); if (bNotLoag) { Toast.makeText(getActivity().getApplicationContext(), R.string.no_more, Toast.LENGTH_SHORT).show(); return; } if (tempList.size() > 1) { System.out.println("!tempList.isEmpty()======>"); if (bRefresh) { messageList.clear(); bRefresh = false; if (!messageListView.isStackFromBottom()) { messageListView.setStackFromBottom(true); } messageListView.setStackFromBottom(false); } if (!messageList.isEmpty()) { messageList.remove(messageList.size() - 1); } for (int i=0; i < tempList.size(); i++) { messageList.add(tempList.get(i)); } recentPageNum++; mMessagesAdapter.notifyDataSetChanged(); } else { if (getActivity()!=null) { Toast.makeText(getActivity().getApplicationContext(), R.string.load_failed, Toast.LENGTH_SHORT).show(); } } refresh.setActionView(null); super.onPostExecute(result); } } }