package jm.org.data.area;
import static jm.org.data.area.DBConstants.INDICATOR_NAME;
import static jm.org.data.area.DBConstants.WB_INDICATOR_ID;
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 IndicatorListFragment extends ListFragment implements
LoaderManager.LoaderCallbacks<Cursor> {
public static final String TAG = IndicatorListFragment.class
.getSimpleName();
private final String POSITION = "position";
//private int listPosition;
IndicatorActivity act;
HomeActivity hAct;
AreaCursorAdapter myAdapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
myAdapter = new AreaCursorAdapter(getActivity(), null);
setListAdapter(myAdapter);
// getLoaderManager().initLoader(0, null, this);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
/* Cursor Loader */
setEmptyText("No indicators found");
// myAdapter = new AreaCursorAdapter();
// setListAdapter(mAdapter);
setListShown(false);
getLoaderManager().initLoader(0, null, this);
try { // Check if the parent activity is the IndicatorActivity
hAct = (HomeActivity) getActivity();
myAdapter.setSelectedPosition(-1, getListView());
} catch (ClassCastException actException) {
act = (IndicatorActivity) getActivity();
myAdapter.setSelectedPosition(act.getPosition(), getListView());
getListView().setSelection(act.getPosition());
/*
* if (act == null) { Log.d(TAG,
* "Indicator activity variable is null"); Bundle data =
* getActivity().getIntent().getExtras();
*
* myAdapter.setSelectedPosition(data.getInt(POSITION,-1),
* getListView());
* getListView().setSelection(data.getInt(POSITION,-1)); } else {
* Log.d(TAG, "Indicator activity variable is not null");
* myAdapter.setSelectedPosition(act.getPosition(), getListView());
* getListView().setSelection(act.getPosition()); }
*/
}
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
// Get Cursor at list item row
Cursor cursor = (Cursor) getListAdapter().getItem(position);
String item = cursor.getString(cursor.getColumnIndex(INDICATOR_NAME));
String item_id = cursor.getString(cursor
.getColumnIndex(WB_INDICATOR_ID));
Log.d(TAG, "Indicator selected is: " + item + "-> ID: " + item_id);
try { // Check if the parent activity is the IndicatorActivity
act = (IndicatorActivity) getActivity();
Intent intent = new Intent(getActivity().getApplicationContext(),
IndicatorActivity.class);
intent.putExtra(WB_INDICATOR_ID, item_id);
intent.putExtra(POSITION, position);
startActivity(intent);
act.finish();
} catch (ClassCastException actException) {
Intent intent = new Intent(getActivity().getApplicationContext(),
IndicatorActivity.class);
intent.putExtra(WB_INDICATOR_ID, item_id);
intent.putExtra(POSITION, position);
startActivity(intent);
}
if (act != null) {
act.setIndicator(item);
act.setPosition(position);
myAdapter.setSelectedPosition(position, getListView());
//listPosition = position;
}
// Already in indicator activity
/*
* ChartsFragment chFragment = (ChartsFragment) getFragmentManager()
* .findFragmentById(R.id.chartFragment); if (chFragment != null &&
* chFragment.isInLayout()) { Log.d(TAG,
* "The list item passed to the fragment is " + item);
* chFragment.setText(item); } else { // Activity for phones /* Intent
* intent = new Intent(getActivity().getApplicationContext(),
* DetailActivity.class); intent.putExtra("value", item);
* startActivity(intent);
*/
}
@Override
public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) {
return new IndicatorListAdapter(getActivity());
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
// AreaApplication area = (AreaApplication)
// getActivity().getApplication();
// ;
// mAdapter.swapCursor(cursor);
myAdapter.swapCursor(cursor);
if (isResumed()) {
setListShown(true);
} else {
Log.d(TAG, "Activity is not being resumed");
setListShownNoAnimation(true);
try {
myAdapter.setSelectedPosition(act.getPosition());
} 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);
}
/*private void setListviewSelection(final ListView list, final int pos) {
list.post(new Runnable() {
@Override
public void run() {
// list.setSelection(pos);
View v = list.getChildAt(pos);
if (v != null) {
v.requestFocus();
}
}
});
}*/
@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();
}*/
super.onStop();
} catch (Exception error) {
Log.d(TAG, "Error in stopping Adapter");
}// end try/catch (Exception error)
}// end onStop
}