package com.athena.asm.fragment; import android.app.Activity; import android.app.NotificationManager; import android.content.Context; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ListView; import android.widget.Toast; import com.actionbarsherlock.app.SherlockFragment; import com.athena.asm.ActivityFragmentTargets; import com.athena.asm.OnOpenActivityFragmentListener; import com.athena.asm.R; import com.athena.asm.aSMApplication; import com.athena.asm.Adapter.MailAdapter; import com.athena.asm.service.CheckMessageService; import com.athena.asm.util.StringUtility; import com.athena.asm.util.task.LoadMailTask; import com.athena.asm.viewmodel.BaseViewModel; import com.athena.asm.viewmodel.HomeViewModel; public class MailFragment extends SherlockFragment implements BaseViewModel.OnViewModelChangObserver { private HomeViewModel m_viewModel; private LayoutInflater m_inflater; private ListView m_listView; private boolean m_isLoaded; private OnOpenActivityFragmentListener m_onOpenActivityFragmentListener; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(true); setRetainInstance(true); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { m_inflater = inflater; View layout = m_inflater.inflate(R.layout.mail, null); m_listView = (ListView) layout.findViewById(R.id.mail_list); aSMApplication application = (aSMApplication) getActivity() .getApplication(); m_viewModel = application.getHomeViewModel(); m_viewModel.registerViewModelChangeObserver(this); m_isLoaded = false; return m_listView; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); Activity parentActivity = getSherlockActivity(); if (parentActivity instanceof OnOpenActivityFragmentListener) { m_onOpenActivityFragmentListener = (OnOpenActivityFragmentListener) parentActivity; } if (m_viewModel.getCurrentTab() != null && m_viewModel.getCurrentTab().equals(StringUtility.TAB_MAIL)) { reloadMail(); } } @Override public void onDestroy() { m_viewModel.unregisterViewModelChangeObserver(this); super.onDestroy(); } public void reloadMail() { if (m_viewModel.isLogined()) { if (m_viewModel.getMailBox() == null) { if(m_viewModel.m_isLoadingInProgress) return; LoadMailTask loadMailTask = new LoadMailTask(getActivity(), m_viewModel); loadMailTask.execute(); } else { m_isLoaded = true; m_listView.setAdapter(new MailAdapter(m_inflater, m_viewModel .getMailBox())); m_listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, final int position, long id) { if (position != 3) { if (m_onOpenActivityFragmentListener != null) { final int boxType = position; Bundle bundle = new Bundle(); bundle.putSerializable(StringUtility.MAIL_BOX_TYPE, boxType); m_onOpenActivityFragmentListener.onOpenActivityOrFragment(ActivityFragmentTargets.MAIL_LIST, bundle); } } else if (position == 3) { if (m_onOpenActivityFragmentListener != null) { Bundle bundle = new Bundle(); bundle.putSerializable(StringUtility.URL, "http://www.newsmth.net/bbspstmail.php"); bundle.putSerializable(StringUtility.WRITE_TYPE, 1); bundle.putSerializable(StringUtility.IS_REPLY, false); m_onOpenActivityFragmentListener.onOpenActivityOrFragment(ActivityFragmentTargets.WRITE_POST, bundle); } } } }); } } else { Toast.makeText(getActivity().getApplicationContext(), "请登录后再使用.", Toast.LENGTH_SHORT).show(); } } @Override public void onViewModelChange(BaseViewModel viewModel, String changedPropertyName, Object... params) { if (getActivity() != null) { NotificationManager notificationManager = (NotificationManager) getActivity() .getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.cancel(CheckMessageService.MESSAGE_NOTIFICATION_ID); } if (changedPropertyName.equals(HomeViewModel.MAILBOX_PROPERTY_NAME)) { reloadMail(); } else if (changedPropertyName .equals(HomeViewModel.CURRENTTAB_PROPERTY_NAME)) { if (!m_isLoaded && m_viewModel.getCurrentTab() != null && m_viewModel.getCurrentTab().equals( StringUtility.TAB_MAIL)) { reloadMail(); } } } }