package com.ladjzero.uzlee; import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AbsListView; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.TextView; import com.alibaba.fastjson.JSON; import com.ladjzero.hipda.Post; import com.ladjzero.hipda.Posts; import com.ladjzero.hipda.PostsParser; import com.ladjzero.hipda.Thread; import com.ladjzero.hipda.Threads; import com.ladjzero.hipda.ThreadsParser; import java.util.ArrayList; import java.util.List; /** * Created by ladjzero on 2015/1/1. */ public class FragmentAlerts extends FragmentBase implements AbsListView.OnItemClickListener { Core core; private int tabIndex = -1; private AbsListView mListView; private ArrayAdapter mAdapter; private HttpApi mApi; private PostsParser mPostsParser; private ThreadsParser mThreadsParser; private AsyncTask mParseTask1, mParseTask2; private Threads mThreads; private Posts mPosts; public static FragmentAlerts newInstance(int position) { FragmentAlerts fragment = new FragmentAlerts(); Bundle args = new Bundle(); args.putInt("tab_index", position); fragment.setArguments(args); return fragment; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); tabIndex = getArguments().getInt("tab_index"); try { if (tabIndex == 0) { mThreads = new Threads(); String cached = App.getInstance().getMemCache().get("alerts_tab_" + tabIndex); List<Thread> ts = JSON.parseArray(cached, Thread.class); mThreads.addAll(ts); } else { mPosts = new Posts(); String cached = App.getInstance().getMemCache().get("alerts_tab_" + tabIndex); List<Post> ps = JSON.parseArray(cached, Post.class); mPosts.addAll(ps); } } catch (Exception e) { } switch (tabIndex) { case 0: mAdapter = new AdapterMessageSummary(getActivity(), new ArrayList<Thread>()); break; case 1: mAdapter = new ArrayAdapter<Post>(getActivity(), R.layout.simple_post, R.id.simple_thread_text) { @Override public View getView(int position, View convertView, ViewGroup parent) { View row = super.getView(position, convertView, parent); TextView title = (TextView) row.findViewById(R.id.simple_thread_text); TextView content = (TextView) row.findViewById(R.id.simple_post_text); Post post = getItem(position); title.setText(post.getTitle()); String body = post.getBody(); if (body.length() > 0) { content.setText(post.getBody()); content.setVisibility(View.VISIBLE); } else { content.setVisibility(View.GONE); } return row; } }; break; } Core core = App.getInstance().getCore(); mApi = core.getHttpApi(); mPostsParser = core.getPostsParser(); mThreadsParser = core.getThreadsParser(); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.simple_threads, container, false); mListView = (AbsListView) view.findViewById(R.id.simple_thread_list); mListView.setAdapter(mAdapter); mListView.setOnItemClickListener(this); mListView.setEmptyView(view.findViewById(R.id.empty_view)); switch (tabIndex) { case 0: if (mThreads.size() == 0) { mApi.getMessages(new HttpClientCallback() { @Override public void onSuccess(String response) { mParseTask1 = new AsyncTask<String, Object, Threads>() { @Override protected Threads doInBackground(String... strings) { return mThreadsParser.parseMessages(strings[0]); } @Override protected void onPostExecute(Threads threads) { mThreads.addAll(threads); mAdapter.addAll(threads); } }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, response); } @Override public void onFailure(String reason) { ((ActivityBase) getActivity()).showToast(reason); } }); } else { mAdapter.addAll(mThreads); } break; case 1: if (mPosts.size() == 0) { mApi.getMentions(new HttpClientCallback() { @Override public void onSuccess(String response) { mParseTask2 = new AsyncTask<String, Object, Posts>() { @Override protected Posts doInBackground(String... strings) { return mPostsParser.parseMentions(strings[0]); } @Override protected void onPostExecute(Posts posts) { mPosts.addAll(posts); mAdapter.addAll(posts); } }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, response); } @Override public void onFailure(String reason) { ((ActivityBase) getActivity()).showToast(reason); } }); } else { mAdapter.addAll(mPosts); } break; } return view; } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { if (tabIndex == 0) { Thread chat = (Thread) parent.getAdapter().getItem(position); Intent intent = new Intent(getActivity(), ActivityChat.class); intent.putExtra("name", chat.getAuthor().getName()); intent.putExtra("uid", chat.getAuthor().getId()); startActivity(intent); } else { Post post = (Post) parent.getAdapter().getItem(position); Intent intent = new Intent(getActivity(), ActivityPosts.class); intent.putExtra("tid", post.getTid()); intent.putExtra("fid", post.getFid()); intent.putExtra("title", post.getTitle()); intent.putExtra("pid", post.getId()); startActivity(intent); } } @Override public void onDestroy() { super.onDestroy(); if (mParseTask1 != null && !mParseTask1.isCancelled()) { mParseTask1.cancel(true); } if (mParseTask2 != null && !mParseTask2.isCancelled()) { mParseTask2.cancel(true); } if (tabIndex == 0) { App.getInstance().getMemCache().put("alerts_tab_" + tabIndex, JSON.toJSONString(mThreads)); } else { App.getInstance().getMemCache().put("alerts_tab_" + tabIndex, JSON.toJSONString(mPosts)); } } }