package jm.org.data.area; import static jm.org.data.area.DBConstants.*; import static jm.org.data.area.AreaConstants.*; import android.content.Intent; import android.database.Cursor; import android.os.Bundle; import android.support.v4.app.ListFragment; import android.support.v4.app.LoaderManager; import android.support.v4.content.Loader; import android.util.Log; import android.view.View; import android.widget.ListView; public class CountryListFragment extends ListFragment implements LoaderManager.LoaderCallbacks<Cursor> { public static final String TAG = CountryListFragment.class .getSimpleName(); CountryActivity act; CountryCursorAdapter myAdapter; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); myAdapter = new CountryCursorAdapter(getActivity(), null); setListAdapter(myAdapter); // getLoaderManager().initLoader(0, null, this); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); /* Cursor Loader */ setEmptyText("No Countries found"); setListShown(false); getLoaderManager().initLoader(0, null, this); act = (CountryActivity) getActivity(); myAdapter.setSelectedPosition(act.getCountryPos(), getListView()); getListView().setSelection(act.getCountryPos()); Log.d(TAG, "Position: " + act.getCountryPos()); } @Override public void onListItemClick(ListView l, View v, int position, long id) { super.onListItemClick(l, v, position, id); setCountry(position); } private void setCountry(int position) { // Get Cursor at list item row Cursor cursor = (Cursor) getListAdapter().getItem(position); String item = cursor.getString(cursor.getColumnIndex(COUNTRY_NAME)); int item_id = cursor.getInt(cursor .getColumnIndex(COUNTRY_ID)); // TODO pass cursor to activity to allow for the updating of the country profile Log.d(TAG, "Country selected is: " + item + "-> ID: " + item_id + " at Position: " + position); act = (CountryActivity) getActivity(); Intent intent = new Intent(getActivity().getApplicationContext(), CountryActivity.class); intent.putExtra("country", item); intent.putExtra("country_id", item_id); intent.putExtra(POSITION, position); startActivity(intent); act.finish(); } @Override public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) { return new CountryListAdapter(getActivity()); } @Override public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) { myAdapter.swapCursor(cursor); if ((cursor.getCount() > 0) && (act.getCountryPos() == -1)){ setCountry(0); } if (isResumed()) { setListShown(true); } else { Log.d(TAG, "Activity is not being resumed"); setListShownNoAnimation(true); try { myAdapter.setSelectedPosition(act.getCountryPos()); } catch (NullPointerException e) { // Empty list or startup activy incomplete } } } @Override public void onLoaderReset(Loader<Cursor> arg0) { //myAdapter.swapCursor(null); } public void setListSelection(int position) { myAdapter.setSelectedPosition(position); } public void reload() { getLoaderManager().restartLoader(0, null, this); } @Override public void onStop() { try { super.onStop(); if (this.myAdapter !=null){ //this.myAdapter.getCursor().close(); //this.myAdapter = null; } //this.getLoaderManager().destroyLoader(0); /*if (this.mActivityListCursorObj != null) { this.mActivityListCursorObj.close(); }*/ } catch (Exception error) { Log.d(TAG, "Error in stopping Adapter"); }// end try/catch (Exception error) }// end onStop }