diff --git a/src/com/annimon/client/fragments/ForumFragment.java b/src/com/annimon/client/fragments/ForumFragment.java index 91e927f..1c5c2a1 100644 --- a/src/com/annimon/client/fragments/ForumFragment.java +++ b/src/com/annimon/client/fragments/ForumFragment.java @@ -2,11 +2,12 @@ package com.annimon.client.fragments; import java.util.List; import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentManager; import android.support.v4.app.ListFragment; import android.view.View; import android.widget.AdapterView; -import android.widget.ArrayAdapter; - +import com.annimon.client.R; import com.annimon.client.adapters.ForumPostAdapter; import com.annimon.client.adapters.ForumSectionAdapter; import com.annimon.client.adapters.ForumTopicAdapter; @@ -16,12 +17,47 @@ import com.annimon.client.entities.ForumTopic; import com.annimon.client.tasks.ForumLoader; public class ForumFragment extends ListFragment { - + + private static final String PARAM_MODE = "mode"; + private static final String PARAM_ID = "id"; + + private static final int MODE_TOPICS = 1; + private static final int MODE_POSTS = 2; + private static final int MODE_LAST_POSTS = 3; + @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); - new ForumLoader(getActivity(), sectionListener).execute(); + if (getArguments() == null) { + new ForumLoader(getActivity(), sectionListener).execute(); + return; + } + + final int mode = getArguments().getInt(PARAM_MODE, MODE_LAST_POSTS); + final int id = getArguments().getInt(PARAM_ID, -1); + switch (mode) { + case MODE_TOPICS: + new ForumLoader(getActivity(), topicListener).execute( + ForumLoader.MODE_TOPICS, id); + break; + case MODE_POSTS: + new ForumLoader(getActivity(), postListener).execute( + ForumLoader.MODE_POSTS, id); + break; + case MODE_LAST_POSTS: + new ForumLoader(getActivity(), postListener).execute( + ForumLoader.LAST_POSTS); + break; + } + } + + private void nextScreen(Bundle args) { + Fragment fragment = new ForumFragment(); + fragment.setArguments(args); + + FragmentManager fragmentManager = getActivity().getSupportFragmentManager(); + fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit(); } private final ForumLoader.FinishLoadingListener sectionListener @@ -29,24 +65,25 @@ public class ForumFragment extends ListFragment { @Override public void onLoadingFinished(List items) { - final ForumSectionAdapter adapter = new ForumSectionAdapter(getActivity(), items); + final ForumSectionAdapter adapter = new ForumSectionAdapter(getActivity(), items); setListAdapter(adapter); getListView().setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { ForumSection section = (ForumSection) adapter.getItem(position); + Bundle args = new Bundle(); if (section.getId() == ForumLoader.LAST_POSTS) { // Грузим список последних сообщений - new ForumLoader(getActivity(), postListener).execute( - ForumLoader.LAST_POSTS); + args.putInt(PARAM_MODE, MODE_LAST_POSTS); } else { // Грузим список тем выбранного раздела - new ForumLoader(getActivity(), topicListener).execute( - ForumLoader.MODE_TOPICS, section.getId()); + args.putInt(PARAM_MODE, MODE_TOPICS); + args.putInt(PARAM_ID, section.getId()); } - } - }); + nextScreen(args); + } + }); } }; @@ -63,8 +100,10 @@ public class ForumFragment extends ListFragment { public void onItemClick(AdapterView parent, View view, int position, long id) { // Грузим список постов выбранной темы ForumTopic topic = (ForumTopic) adapter.getItem(position); - new ForumLoader(getActivity(), postListener).execute( - ForumLoader.MODE_POSTS, topic.getId()); + Bundle args = new Bundle(); + args.putInt(PARAM_MODE, MODE_POSTS); + args.putInt(PARAM_ID, topic.getId()); + nextScreen(args); } }); } @@ -72,10 +111,10 @@ public class ForumFragment extends ListFragment { private final ForumLoader.FinishLoadingListener postListener = new ForumLoader.FinishLoadingListener() { - - @Override + + @Override public void onLoadingFinished(List items) { - setListAdapter(new ForumPostAdapter(getActivity(), items)); + setListAdapter(new ForumPostAdapter(getActivity(), items)); } }; }