Ok, Just for the practice, I'm implementing something very similar to the Alarm Clock app included in Android by default. I'm going to put each file in their own post.
First in this post, Alarmsutta.java which includes the main setup, and the CursorAdapter: package net.esalazar.alarmsutta; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.res.Resources; import android.database.Cursor; import android.os.Bundle; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.view.View.OnClickListener; import android.widget.AdapterView; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.CursorAdapter; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TextView; import android.widget.AdapterView.OnItemSelectedListener; import android.widget.CompoundButton.OnCheckedChangeListener; public class Alarmsutta extends Activity { private Alarm selectedAlarm; private AlarmDBAdapter dbAdapter; // Options menu codes public final int MENU_NEW = Menu.FIRST; public final int MENU_EDIT = Menu.FIRST + 1; public final int MENU_DELETE = Menu.FIRST + 2; // Intent codes for starting activities public final int NEW_ALARM = 1; public final int EDIT_ALARM = 2; ListView alarmsListView; AlarmCursorAdapter cursorAdapter; Cursor allAlarmsCursor; private LayoutInflater layoutFactory; private class AlarmCursorAdapter extends CursorAdapter { public AlarmCursorAdapter(Context context, Cursor c) { super(context, c, true); } @Override public View newView(Context context, Cursor cursor, ViewGroup parent) { return layoutFactory.inflate(R.layout.alarmlist_item, parent, false); } @Override public void bindView(View view, Context context, Cursor cursor) { final Alarm item = dbAdapter.getAlarmFromCursor(cursor); LinearLayout alarmView = (LinearLayout)view; Date expiry = item.getExpiry(); String title = item.getTitle(); SimpleDateFormat sdf; sdf = new SimpleDateFormat("MM/dd/yyyy"); String expiryDateString = sdf.format(expiry); sdf = new SimpleDateFormat("hh:mm"); String expiryTimeString = sdf.format(expiry); String message = item.getMessage(); final boolean enabled = item.isEnabled(); Calendar calendar = Calendar.getInstance(); calendar.setTime(expiry); // Get references to all the elements we wish to muck with TextView titleTextView = (TextView)alarmView.findViewById (R.id.itemTitleTextView); TextView messageTextView = (TextView)alarmView.findViewById (R.id.itemMessageTextView); TextView timeTextView = (TextView)alarmView.findViewById (R.id.itemTimeTextView); // Dim the AM/PM label accordingly leaving the correct one bright TextView amTextView = (TextView)alarmView.findViewById (R.id.itemAMTextView); TextView pmTextView = (TextView)alarmView.findViewById (R.id.itemPMTextView); Resources r = getResources(); int amPmColorOn = r.getColor(R.color.ampm_on); int amPmColorOff = r.getColor(R.color.ampm_off); if( calendar.get(Calendar.HOUR_OF_DAY) >= 12 ) { amTextView.setTextColor(amPmColorOff); pmTextView.setTextColor(amPmColorOn); } else { amTextView.setTextColor(amPmColorOn); pmTextView.setTextColor(amPmColorOff); } CheckBox enabledCheckBox = (CheckBox)alarmView.findViewById (R.id.itemEnabledCheckBox); // Set the title and message accordingly. We prefix the message with // the date just to be coy. titleTextView.setText(title); messageTextView.setText( expiryDateString + " " + message ); timeTextView.setText(expiryTimeString); enabledCheckBox.setChecked(enabled); enabledCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener() { public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { item.setEnabled(isChecked); dbAdapter.updateAlarm(item.getId(), item); notifyDataSetChanged(); } }); LinearLayout alarmSelectionBox = (LinearLayout) alarmView.findViewById(R.id.alarmSelectionBox); alarmSelectionBox.setOnClickListener(new OnClickListener() { public void onClick(View v) { startEditAlarm(dbAdapter.getAlarm(item.getId())); } }); } } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); layoutFactory = LayoutInflater.from(this); // Set up array adapter and viewer for alarms list dbAdapter = new AlarmDBAdapter(this); dbAdapter.open(); allAlarmsCursor = dbAdapter.getAllAlarmItemsCursor(); cursorAdapter = new AlarmCursorAdapter(this, allAlarmsCursor); alarmsListView = (ListView)findViewById(R.id.alarmsListView); alarmsListView.setAdapter(cursorAdapter); alarmsListView.setVerticalScrollBarEnabled(true); alarmsListView.setItemsCanFocus(true); alarmsListView.setOnItemSelectedListener(new OnItemSelectedListener() { public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { selectedAlarm = dbAdapter.getAlarm(id); } public void onNothingSelected(AdapterView<?> arg0) { selectedAlarm = null; } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if( resultCode != Activity.RESULT_OK ) return; Date expiry = new Date(data.getLongExtra("expiryTime", 0)); String title = data.getStringExtra("title"); String message = data.getStringExtra("message"); boolean enabled = data.getBooleanExtra("enabled", true); int id = data.getIntExtra("id", -1); Alarm newAlarm = new Alarm(expiry, title, message, enabled, id); switch( requestCode ) { case( NEW_ALARM ): { dbAdapter.insertAlarm(newAlarm); break; } case( EDIT_ALARM ): { // If we only get the default value of -1 then something is wrong if( id == -1 ) throw new RuntimeException(); dbAdapter.updateAlarm(id, newAlarm); break; } } allAlarmsCursor.requery(); cursorAdapter.notifyDataSetChanged(); } @Override public void onDestroy() { dbAdapter.close(); super.onDestroy(); } @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); // Add menu item for creating a new alarm and // one for deleting selected alarm menu.add(0, MENU_NEW, Menu.NONE, R.string.menu_new ); menu.add(0, MENU_EDIT, Menu.NONE, R.string.menu_edit ); menu.add(0, MENU_DELETE, Menu.NONE, R.string.menu_delete ); return true; } @Override public boolean onPrepareOptionsMenu(Menu menu) { super.onPrepareOptionsMenu(menu); MenuItem editItem = menu.findItem(MENU_EDIT); MenuItem deleteItem = menu.findItem(MENU_DELETE); boolean showEditOptions = (selectedAlarm != null); editItem.setVisible(showEditOptions); deleteItem.setVisible(showEditOptions); return true; } private void startEditAlarm(Alarm alarm) { // Tell the NewAlarm activity what to expect Intent i = new Intent(this,NewAlarm.class); i.putExtra("expiryTime", alarm.getExpiry().getTime()); i.putExtra("title", alarm.getTitle()); i.putExtra("message", alarm.getMessage()); i.putExtra("enabled", alarm.isEnabled()); i.putExtra("id", alarm.getId()); startActivityForResult(i, EDIT_ALARM); } @Override public boolean onOptionsItemSelected(MenuItem item) { // Figure out which item this is and act accordingly // If it is to create or edit switch( item.getItemId() ) { case( MENU_NEW ): { Intent i = new Intent(this,NewAlarm.class); startActivityForResult(i, NEW_ALARM); return true; } case( MENU_EDIT ): { startEditAlarm(selectedAlarm); return true; } case( MENU_DELETE ): { dbAdapter.removeAlarm(selectedAlarm.getId()); allAlarmsCursor.requery(); cursorAdapter.notifyDataSetChanged(); return true; } } return false; } } On Jul 23, 6:16 pm, Gregg Reno <gregg.r...@gmail.com> wrote: > It would be great if you could post the code and xml! I'm using a > SimpleCursorAdapter and would love to see how you are using the > CursorAdaptor instead. My app is a little tricky because I extend > TabActivity rather than ListActivity. If I get it working, maybe I'll > put together a standalone tutorial. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers-unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en -~----------~----~----~----~------~----~------~--~---