Changed cursor management after seeing problems in Honeycomb. Stop using managed cursors and use changeCursor.

This commit is contained in:
Kevin Ruland 2012-02-05 02:47:25 +00:00
parent 125162bcbe
commit 9b56d151d2

View File

@ -5,10 +5,8 @@ import net.sf.openrocket.android.db.DbAdapter;
import net.sf.openrocket.android.db.MotorDao; import net.sf.openrocket.android.db.MotorDao;
import net.sf.openrocket.android.util.AndroidLogWrapper; import net.sf.openrocket.android.util.AndroidLogWrapper;
import net.sf.openrocket.android.util.PersistentExpandableListFragment; import net.sf.openrocket.android.util.PersistentExpandableListFragment;
import net.sf.openrocket.motor.Motor;
import android.app.Activity; import android.app.Activity;
import android.content.Context; import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.content.res.Resources; import android.content.res.Resources;
import android.database.Cursor; import android.database.Cursor;
@ -35,13 +33,13 @@ implements SharedPreferences.OnSharedPreferenceChangeListener
public interface OnMotorSelectedListener { public interface OnMotorSelectedListener {
public void onMotorSelected( long motorId ); public void onMotorSelected( long motorId );
} }
public static MotorListFragment newInstance( ) { public static MotorListFragment newInstance( ) {
MotorListFragment frag = new MotorListFragment(); MotorListFragment frag = new MotorListFragment();
return frag; return frag;
} }
private static final int CONTEXTMENU_DELETE = Menu.FIRST+1; private static final int CONTEXTMENU_DELETE = Menu.FIRST+1;
private String groupColumnPreferenceKey; private String groupColumnPreferenceKey;
@ -57,9 +55,9 @@ implements SharedPreferences.OnSharedPreferenceChangeListener
private CursorTreeAdapter mAdapter; private CursorTreeAdapter mAdapter;
private DbAdapter mDbHelper; private DbAdapter mDbHelper;
private OnMotorSelectedListener motorSelectedListener; private OnMotorSelectedListener motorSelectedListener;
public void setMotorSelectedListener( public void setMotorSelectedListener(
OnMotorSelectedListener motorSelectedListener) { OnMotorSelectedListener motorSelectedListener) {
this.motorSelectedListener = motorSelectedListener; this.motorSelectedListener = motorSelectedListener;
@ -80,10 +78,7 @@ implements SharedPreferences.OnSharedPreferenceChangeListener
protected Cursor getChildrenCursor(Cursor arg0) { protected Cursor getChildrenCursor(Cursor arg0) {
AndroidLogWrapper.d(MotorListFragment.class,"getChildrenCursor"); AndroidLogWrapper.d(MotorListFragment.class,"getChildrenCursor");
String group = arg0.getString(arg0.getColumnIndex(groupColumn)); String group = arg0.getString(arg0.getColumnIndex(groupColumn));
AndroidLogWrapper.d(MotorListFragment.class," for: "+ groupColumn + " = " + group);
Cursor c = mDbHelper.getMotorDao().fetchAllInGroups(groupColumn,group); Cursor c = mDbHelper.getMotorDao().fetchAllInGroups(groupColumn,group);
AndroidLogWrapper.d(MotorListFragment.class," got cursor");
getActivity().startManagingCursor(c);
return c; return c;
} }
@ -98,16 +93,16 @@ implements SharedPreferences.OnSharedPreferenceChangeListener
@Override @Override
protected void bindChildView(View arg0, Context arg1, Cursor arg2, protected void bindChildView(View arg0, Context arg1, Cursor arg2,
boolean arg3) { boolean arg3) {
TextView manu = (TextView) arg0.findViewById(R.id.motorChildManu); TextView manu = (TextView) arg0.findViewById(R.id.motorChildManu);
manu.setText( arg2.getString(arg2.getColumnIndex(MotorDao.MANUFACTURER))); manu.setText( arg2.getString(arg2.getColumnIndex(MotorDao.MANUFACTURER)));
TextView desig = (TextView) arg0.findViewById(R.id.motorChildName); TextView desig = (TextView) arg0.findViewById(R.id.motorChildName);
desig.setText( arg2.getString(arg2.getColumnIndex(MotorDao.DESIGNATION))); desig.setText( arg2.getString(arg2.getColumnIndex(MotorDao.DESIGNATION)));
TextView delays = (TextView) arg0.findViewById(R.id.motorChildDelays); TextView delays = (TextView) arg0.findViewById(R.id.motorChildDelays);
delays.setText( arg2.getString(arg2.getColumnIndex(MotorDao.DELAYS))); delays.setText( arg2.getString(arg2.getColumnIndex(MotorDao.DELAYS)));
TextView totImpulse = (TextView) arg0.findViewById(R.id.motorChildImpulse); TextView totImpulse = (TextView) arg0.findViewById(R.id.motorChildImpulse);
totImpulse.setText( arg2.getString(arg2.getColumnIndex(MotorDao.TOTAL_IMPULSE))); totImpulse.setText( arg2.getString(arg2.getColumnIndex(MotorDao.TOTAL_IMPULSE)));
} }
@ -126,7 +121,7 @@ implements SharedPreferences.OnSharedPreferenceChangeListener
v.setText( cursor.getString( cursor.getColumnIndex(groupColumn))); v.setText( cursor.getString( cursor.getColumnIndex(groupColumn)));
} }
} }
} }
@Override @Override
@ -159,7 +154,7 @@ implements SharedPreferences.OnSharedPreferenceChangeListener
setGroupColumnFromPreferences(pref); setGroupColumnFromPreferences(pref);
pref.registerOnSharedPreferenceChangeListener(this); pref.registerOnSharedPreferenceChangeListener(this);
if ( activity instanceof OnMotorSelectedListener ) { if ( activity instanceof OnMotorSelectedListener ) {
motorSelectedListener = (OnMotorSelectedListener) activity; motorSelectedListener = (OnMotorSelectedListener) activity;
} }
@ -227,17 +222,19 @@ implements SharedPreferences.OnSharedPreferenceChangeListener
} }
private void refreshData() { private void refreshData() {
if (mAdapter != null ) {
mAdapter.changeCursor(null);
}
Cursor motorCursor = mDbHelper.getMotorDao().fetchGroups(groupColumn); Cursor motorCursor = mDbHelper.getMotorDao().fetchGroups(groupColumn);
getActivity().startManagingCursor(motorCursor); if (mAdapter != null ) {
// Set up our adapter mAdapter.changeCursor(motorCursor);
mAdapter = new MotorHierarchicalListAdapter( }
getActivity(), else {
motorCursor, // Set up our adapter
R.layout.motor_list_group, mAdapter = new MotorHierarchicalListAdapter(
R.layout.motor_list_child); getActivity(),
setListAdapter(mAdapter); motorCursor,
R.layout.motor_list_group,
R.layout.motor_list_child);
setListAdapter(mAdapter);
}
} }
} }