Each element of my SherlockListFragment contains 3 TextView : a name and two numbers. The data comes from the objective table of my database, which has the following structure:
CREATE TABLE objective ( _id INTEGER PRIMARY KEY, id_project INTEGER NOT NULL, activity_code INTEGER NOT NULL, day_duration INTEGER NOT NULL, week_frequency INTEGER NOT NULL, FOREIGN KEY(id_project) REFERENCES project(id_project) );
In addition, I read that filling the list with the cursor should be done using the loader (especially when using the database, since this can be a very slow operation). I have found the SimpleCursorLoader class https://stackoverflow.com/a/166269/2126328 , but it directly displays the data in the field.
This is not exactly what I want, because, as you can see, in my objective table I have activity_code . Therefore, I would like to replace it with a string (I have an Enum that lists all my activity codes and returns a string resource identifier for each of them).
Do you know how I can manipulate data before it is displayed in a TextView ?
Here is my SherlockListFragment
public class ObjectivesDisplayFragment extends SherlockListFragment implements LoaderManager.LoaderCallbacks<Cursor> { private Activity activity; private SimpleCursorAdapter adapter; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.objectives_display, container, false); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); activity = getActivity(); String[] columns = new String[] { "activity_code", "day_duration", "week_frequency" }; int[] to = new int[] { R.id.activityName, R.id.objectiveDuration, R.id.objectiveFrequency }; getLoaderManager().initLoader(0x01, null, this); adapter = new SimpleCursorAdapter(activity.getApplicationContext(), R.layout.objective_row, null, columns, to, SimpleCursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER); setListAdapter(adapter); } public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) { return new SimpleCursorLoader(activity) { @Override public Cursor loadInBackground() { DatabaseHelper dbHelper = DatabaseHelper.getInstance(activity); String query = "SELECT _id, activity_code, day_duration, week_frequency FROM objective WHERE id_project = ?"; String[] args = new String[] { "1" };
EDIT: I don't need to close the cursor and database in SimpleCursorLoader> loadInBackground, right? Otherwise, the data could not be read. That is, the close operation is automatically processed or do I need to do it myself in another place?