package what.whatandroid.announcements;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.ListFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import api.announcements.Announcement;
import what.whatandroid.R;
import java.util.ArrayList;
import java.util.Arrays;
/**
* Displays an announcement
*/
public class AnnouncementDetailFragment extends ListFragment {
private Context context;
private Announcement announcement;
private AnnouncementDetailAdapter adapter;
/**
* View displaying the announcement information
*/
View header;
TextView title, date;
/**
* Use this factory method to create a new instance of the fragment to display the announcement
*
* @param announcement the announcement to display
* @return An AnnouncementFragment displaying the desired announcement
*/
public static AnnouncementDetailFragment newInstance(Announcement announcement){
AnnouncementDetailFragment fragment = new AnnouncementDetailFragment();
fragment.announcement = announcement;
return fragment;
}
public AnnouncementDetailFragment(){
// Required empty public constructor
}
public void setAnnouncement(Announcement announcement){
this.announcement = announcement;
updateAnnouncement();
if (adapter == null){
//Will splitting the announcement be too costly? We could do it in the loading task if we want
adapter = new AnnouncementDetailAdapter(context,
new ArrayList<String>(Arrays.asList(announcement.getBody().split("<br />+"))));
setListAdapter(adapter);
}
adapter.clear();
adapter.addAll(announcement.getBody().split("<br />+"));
adapter.notifyDataSetChanged();
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState){
super.onViewCreated(view, savedInstanceState);
getListView().addHeaderView(header);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
View view = super.onCreateView(inflater, container, savedInstanceState);
header = inflater.inflate(R.layout.header_announcement, null);
title = (TextView)header.findViewById(R.id.announcement_title);
date = (TextView)header.findViewById(R.id.announcement_date);
return view;
}
@Override
public void onAttach(Activity activity){
super.onAttach(activity);
context = activity;
if (adapter == null && announcement != null){
//Will splitting the announcement be too costly? We could do it in the loading task if we want
adapter = new AnnouncementDetailAdapter(context,
new ArrayList<String>(Arrays.asList(announcement.getBody().split("<br />+"))));
setListAdapter(adapter);
}
}
private void updateAnnouncement(){
title.setText(announcement.getTitle());
date.setText(announcement.getNewsTime());
}
}