Have you tried calling requery on the underlying Cursor? On Jan 4, 8:00 pm, mac-systems <[email protected]> wrote: > Hello, > > i update a value in my Database in a Listview using a Context Menu. > The code so far seems to be ok. But everything i try to make the > update visible in the View failed. Anyone can point me whats wrong > there ? I use a ViewBinder to map the Layout for each row. > > Row Layout: > > ?xml version="1.0" encoding="UTF-8"?> > <LinearLayout > xmlns:android="http://schemas.android.com/apk/res/android" > android:orientation="vertical" > android:layout_width="fill_parent" > android:layout_height="fill_parent"> > > <TextView > android:id="@+id/custom_spotoverview_name" > android:text="text" > android:layout_width="wrap_content" > android:layout_height="wrap_content" > android:textSize="20sp" /> > > <LinearLayout > xmlns:android="http://schemas.android.com/apk/res/android" > android:orientation="horizontal" > android:layout_width="fill_parent" > android:layout_height="fill_parent"> > > <ImageView > android:id="@+id/custom_spotoverview_activ" > android:layout_width="wrap_content" > android:layout_height="wrap_content" /> > > <View > android:layout_width="5dp" > android:layout_height="5dp" /> > > <TextView > android:id="@+id/custom_spotoverview_wind_details" > android:text="some default text" > android:layout_width="wrap_content" > android:layout_height="wrap_content" /> > > <View > android:layout_width="5dp" > android:layout_height="5dp" /> > > <TextView > android:id="@+id/custom_spotoverview_detail" > android:text="some default text" > android:layout_width="wrap_content" > android:layout_height="wrap_content" /> > <View > android:layout_width="5dp" > android:layout_height="5dp" /> > > <ImageView > android:id="@+id/custom_spotoverview_wind_from" > android:background="@drawable/icon" > android:layout_width="wrap_content" > android:layout_height="wrap_content" /> > <View > android:layout_width="5dp" > android:layout_height="5dp" /> > > <ImageView > android:id="@+id/custom_spotoverview_wind_to" > android:background="@drawable/icon" > android:layout_width="wrap_content" > android:layout_height="wrap_content" /> > </LinearLayout> > </LinearLayout> > > The ViewBinder: > > public class SpotOverviewViewBinder implements > SimpleCursorAdapter.ViewBinder > { > > private static final int SPOT_NAME = 0; > private static final int SPOT_ID = 2; > > private static final int WIND_TO = 5; > private static final int WIND_FROM = 6; > > private static final int SPOT_ACTIV = 3; > > /** > * Converts integer representing a boolean (0,1) to enabled or > disabled icon > * resource id. > * > * @param value > * @return > */ > private final static int convertIntToResourceID(final int value) > { > return value == 0 ? R.drawable.activ_off : > R.drawable.activ_on; > } > > /* > * (non-Javadoc) > * > * @see > * android.widget.SimpleCursorAdapter.ViewBinder#setViewValue > (android.view > * .View, android.database.Cursor, int) > */ > @Override > public boolean setViewValue(final View view, final Cursor cursor, > final int columnIndex) > { > if (columnIndex == SPOT_ACTIV) > { > final ImageView iv = (ImageView) view; > final int resID = convertIntToResourceID(cursor.getInt > (columnIndex)); > iv.setBackgroundResource(resID); > } > else if (columnIndex == SPOT_NAME) > { > final String name = cursor.getString(columnIndex); > final TextView tv = (TextView) view; > tv.setText(name); > } > else if (columnIndex == SPOT_ID) > { > final TextView tv = (TextView) view; > tv.setText(cursor.getString(columnIndex)); > } > else if (columnIndex == WIND_FROM) > { > final ImageView tv = (ImageView) view; > final String id = cursor.getString(columnIndex); > final int index = IdentityUtil.indexOf(id, > WindDirection.values()); > final int resID = > WindDirection.values()[index].getImage(); > tv.setImageResource(resID); > } > else if (columnIndex == WIND_TO) > { > final ImageView tv = (ImageView) view; > final String id = cursor.getString(columnIndex); > final int index = IdentityUtil.indexOf(id, > WindDirection.values()); > final int resID = > WindDirection.values()[index].getImage(); > tv.setImageResource(resID); > } > > return true; > } > > } > > The ListActivity: > > public class SpotOverview extends ListActivity > { > > private final static String LOG_TAG = SpotOverview.class.getSimpleName > (); > private static final int ENABLE_ITEM_ID = 0; > private static final int DISABLE_ITEM_ID = 1; > private static final int EDIT_ITEM_ID = 2; > > Cursor c = null; > SimpleCursorAdapter shows = null; > > /* > * (non-Javadoc) > * > * @see android.app.Activity#onCreate(android.os.Bundle) > */ > @Override > protected void onCreate(final Bundle savedInstanceState) > { > super.onCreate(savedInstanceState); > setContentView(R.layout.spotoverview); > > final ISelectedDAO dao = DAOFactory.getSelectedDAO(this); > c = dao.fetchAll(); > startManagingCursor(c); > > final String[] from = new String[] > { ISelectedDAO.COLUMN_ACTIV, ISelectedDAO.COLUMN_NAME, > ISelectedDAO.COLUMN_ID, ISelectedDAO.COLUMN_STARTING, > ISelectedDAO.COLUMN_TILL }; > final int[] to = new int[] > { R.id.custom_spotoverview_activ, > R.id.custom_spotoverview_name, > R.id.custom_spotoverview_detail, > R.id.custom_spotoverview_wind_from, > R.id.custom_spotoverview_wind_to }; > shows = new SimpleCursorAdapter(this, > R.layout.custom_listview_spotoverview, c, from, to); > shows.setViewBinder(new SpotOverviewViewBinder()); > setListAdapter(shows); > > // > getListView().setOnCreateContextMenuListener(new > OnCreateContextMenuListener() > { > @Override > public final void onCreateContextMenu(final > ContextMenu menu, final > View v, final ContextMenuInfo menuInfo) > { > final long selectedItemID = > getSelectedItemId(); > final boolean isActiv = > dao.isActiv(selectedItemID); > menu.add(0, EDIT_ITEM_ID, 0, > R.string.spot_overview_spot_edit); > if (isActiv) > { > menu.add(0, DISABLE_ITEM_ID, 0, > R.string.spot_overview_spot_monitoring_disable); > } > else > { > menu.add(0, ENABLE_ITEM_ID, 0, > R.string.spot_overview_spot_monitoring_enable); > } > } > }); > } > > /* > * (non-Javadoc) > * > * @see android.app.Activity#onContextItemSelected > (android.view.MenuItem) > */ > @Override > public boolean onContextItemSelected(final MenuItem __item) > { > switch (__item.getItemId()) > { > case DISABLE_ITEM_ID: > setActive(false); > break; > case ENABLE_ITEM_ID: > setActive(true); > break; > case EDIT_ITEM_ID: > editSpot(); > break; > default: > throw new IllegalArgumentException("Unkown Item ID " + > __item.getItemId()); > } > > return true; > } > > private void setActive(final boolean _state) > { > final ISelectedDAO dao = DAOFactory.getSelectedDAO(this); > dao.setActiv(getSelectedItemId(), _state); > shows.notifyDataSetChanged(); > Log.d(LOG_TAG, "Updating View"); > // getListView().invalidateViews(); > // > // final BaseAdapter adapter = (BaseAdapter) getListAdapter(); > // adapter.notifyDataSetChanged(); > } > > private void editSpot() > { > } > > } > > The Database Table: > > CREATE TABLE IF NOT EXISTS selected (_id INTEGER PRIMARY KEY > AUTOINCREMENT, spotid text NOT NULL, name TEXT NOT NULL, activ > BOOLEAN, usedirection BOOLEAN, starting TEXT, till TEXT, windmeasure > TEXT NOT NULL, minwind INTEGER, maxwind INTEGER); > > The Method setActive will be called after the User selected to enable > or disable an entry. The value is updated in the Database, but what to > do to refresh the View correctly ? I read a lot about > notifyDataSetChanged(); but it does not work, any help is welcome. > > Thx, > Jens
-- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/android-developers?hl=en

