package org.qii.weiciyuan.ui.topic; import org.qii.weiciyuan.R; import org.qii.weiciyuan.bean.UserBean; import org.qii.weiciyuan.dao.topic.TopicDao; import org.qii.weiciyuan.dao.topic.UserTopicListDao; import org.qii.weiciyuan.support.error.WeiboException; import org.qii.weiciyuan.support.lib.MyAsyncTask; import org.qii.weiciyuan.support.utils.GlobalContext; import org.qii.weiciyuan.support.utils.Utility; import android.app.ListFragment; import android.content.Intent; import android.os.Bundle; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Toast; import java.util.ArrayList; import java.util.List; /** * User: qii * Date: 12-11-18 */ public class UserTopicListFragment extends ListFragment { private ArrayAdapter<String> adapter; private ArrayList<String> result = new ArrayList<String>(); private UserBean userBean; private TopicListTask task; private FollowTopicTask followTopicTask; public UserTopicListFragment() { } public UserTopicListFragment(UserBean userBean) { this.userBean = userBean; } public UserTopicListFragment(UserBean userBean, ArrayList<String> topicList) { this.userBean = userBean; this.result = topicList; } @Override public void onDetach() { super.onDetach(); Utility.cancelTasks(task, followTopicTask); } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putParcelable("userBean", userBean); outState.putStringArrayList("topicList", result); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(true); setRetainInstance(true); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); if (savedInstanceState != null) { userBean = (UserBean) savedInstanceState.getParcelable("userBean"); result = (ArrayList<String>) savedInstanceState.getStringArrayList("topicList"); } adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, result); setListAdapter(adapter); getListView().setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { String str = result.get(position); String q; if (str.startsWith("#") && str.endsWith("#")) { q = str.substring(1, str.length() - 1); } else { q = str; } Intent intent = new Intent(getActivity(), SearchTopicByNameActivity.class); intent.putExtra("q", q); startActivity(intent); } }); if (result == null || result.size() == 0) { refresh(); } } private void refresh() { task = new TopicListTask(); task.executeOnExecutor(MyAsyncTask.THREAD_POOL_EXECUTOR); } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); if (userBean.getId().equals(GlobalContext.getInstance().getCurrentAccountId())) { inflater.inflate(R.menu.actionbar_menu_usertopiclistfragment, menu); } } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.menu_add_topic: FollowTopicDialog dialog = FollowTopicDialog.newInstance(); dialog.setTargetFragment(this, 1); dialog.show(getFragmentManager(), ""); break; } return super.onOptionsItemSelected(item); } class TopicListTask extends MyAsyncTask<Void, List<String>, List<String>> { WeiboException e; @Override protected List<String> doInBackground(Void... params) { UserTopicListDao dao = new UserTopicListDao( GlobalContext.getInstance().getSpecialToken(), userBean.getId()); try { return dao.getGSONMsgList(); } catch (WeiboException e) { this.e = e; cancel(true); return null; } } @Override protected void onPostExecute(List<String> atUserBeans) { super.onPostExecute(atUserBeans); if (isCancelled()) { return; } if (atUserBeans == null || atUserBeans.size() == 0) { return; } result.clear(); result.addAll(atUserBeans); adapter.notifyDataSetChanged(); } } public void addTopic(String keyWord) { if (Utility.isTaskStopped(followTopicTask)) { followTopicTask = new FollowTopicTask(keyWord); followTopicTask.executeOnExecutor(MyAsyncTask.THREAD_POOL_EXECUTOR); } } private class FollowTopicTask extends MyAsyncTask<Void, Boolean, Boolean> { WeiboException e; String keyWord; public FollowTopicTask(String keyWord) { this.keyWord = keyWord; } @Override protected Boolean doInBackground(Void... params) { try { return new TopicDao(GlobalContext.getInstance().getSpecialToken()).follow(keyWord); } catch (WeiboException e) { this.e = e; cancel(true); } return false; } @Override protected void onCancelled(Boolean aBoolean) { super.onCancelled(aBoolean); if (Utility.isAllNotNull(getActivity(), this.e)) { Toast.makeText(getActivity(), e.getError(), Toast.LENGTH_SHORT).show(); } } @Override protected void onPostExecute(Boolean aBoolean) { super.onPostExecute(aBoolean); if (getActivity() == null) { return; } if (aBoolean) { Toast.makeText(getActivity(), getString(R.string.follow_topic_successfully), Toast.LENGTH_SHORT).show(); refresh(); } else { Toast.makeText(getActivity(), getString(R.string.follow_topic_failed), Toast.LENGTH_SHORT).show(); } } } }