Добавлена возможность сохранения состояния экранов перемещения по форуму

This commit is contained in:
Victor 2014-01-10 17:51:10 +02:00
parent 660ed19952
commit 8e303c5fe3

View File

@ -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<ForumSection>(getActivity(), sectionListener).execute();
if (getArguments() == null) {
new ForumLoader<ForumSection>(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<ForumTopic>(getActivity(), topicListener).execute(
ForumLoader.MODE_TOPICS, id);
break;
case MODE_POSTS:
new ForumLoader<ForumPost>(getActivity(), postListener).execute(
ForumLoader.MODE_POSTS, id);
break;
case MODE_LAST_POSTS:
new ForumLoader<ForumPost>(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<ForumSection> sectionListener
@ -29,24 +65,25 @@ public class ForumFragment extends ListFragment {
@Override
public void onLoadingFinished(List<ForumSection> 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<ForumPost>(getActivity(), postListener).execute(
ForumLoader.LAST_POSTS);
args.putInt(PARAM_MODE, MODE_LAST_POSTS);
} else {
// Ãðóçèì ñïèñîê òåì âûáðàííîãî ðàçäåëà
new ForumLoader<ForumTopic>(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<ForumPost>(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<ForumPost> postListener
= new ForumLoader.FinishLoadingListener<ForumPost>() {
@Override
@Override
public void onLoadingFinished(List<ForumPost> items) {
setListAdapter(new ForumPostAdapter(getActivity(), items));
setListAdapter(new ForumPostAdapter(getActivity(), items));
}
};
}