0

I have set up a LongClick on my ListActivity which invokes an AlertDialogue with option to delete or cancel, followed by another AlertDialogue for confirmation of delete.

However, I need to refresh the list to show the changes but can't see how to do this (note the list is filled using a ResourceCursorAdapter):

public class InspectionActivity extends ListActivity {
private Button newInspection;
private static final int ACTIVITY_CREATE=0;

private RMDbAdapter rmDbHelper;
//private AlertDialog longClickOptionsDialog;
private AlertDialog clickOptionsDialog;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_inspection);
    setUpViews();
    setLongClick();

    rmDbHelper = new RMDbAdapter(this);
    rmDbHelper.open();

    // Get a Cursor for the list items
    Cursor listCursor = rmDbHelper.fetchAllInspections();
    startManagingCursor(listCursor);           

    // set the custom list adapter     
    setListAdapter(new MyListAdapter(this, listCursor));


}



private void setUpViews() {
    newInspection = (Button)findViewById(R.id.new_inspection);
    newInspection.setOnClickListener(new View.OnClickListener() {                       
        public void onClick(View v) {
            createInspection();
        }
    }); 

}

private void setLongClick() {
    ListView lv = getListView(); 
    lv.setOnItemLongClickListener(new OnItemLongClickListener() { 
        public boolean onItemLongClick(AdapterView<?> arg0, View arg1,int row, final long id) {
            Cursor cursor = (Cursor) rmDbHelper.fetchInspection(id);

            String inspectionRef = RMUtilities.notEmpty(cursor.getString(cursor.getColumnIndex( 
                    RMDbAdapter.INSPECTION_REF)), "Reference unknown"); 
            String companyName = RMUtilities.notEmpty(cursor.getString(cursor.getColumnIndex( 
                    RMDbAdapter.INSPECTION_COMPANY)), "company unknown"); 
            final String inspectionDialogueText = "(" + inspectionRef + ", " + companyName + ")"; 

            clickOptionsDialog = new AlertDialog.Builder(InspectionActivity.this)
            .setTitle(inspectionDialogueText)
            .setMessage(R.string.general_text_select_option)
            .setPositiveButton(R.string.general_button_delete, new AlertDialog.OnClickListener(){
                private AlertDialog confirmDeleteDialog;
                public void onClick(DialogInterface dialog, int which){
                    confirmDeleteDialog = new AlertDialog.Builder(InspectionActivity.this)
                    .setTitle(R.string.general_text_confirmation)
                    .setMessage(R.string.general_text_confirm_delete)
                    .setPositiveButton(R.string.general_button_yes, new AlertDialog.OnClickListener(){
                        public void onClick(DialogInterface dialog, int which){
                            rmDbHelper.deleteInspection(id);

**//REFRESH STATEMENT NEEDED HERE..**
                            }
                        })
                    .setNegativeButton(R.string.general_button_cancel, new AlertDialog.OnClickListener(){
                        public void onClick(DialogInterface dialog, int which){
                            confirmDeleteDialog.cancel();
                            }
                        })
                    .create();
                    confirmDeleteDialog.show();
                    }
                })                  
            .setNegativeButton(android.R.string.cancel, new AlertDialog.OnClickListener(){
                public void onClick(DialogInterface dialog, int which){
                    clickOptionsDialog.cancel();
                    }
                })
            .create();
            clickOptionsDialog.show();
            return true;
        } 
    });
}

// In your ListActivity class, create a new inner class that extends ResourceCursorAdapter. 
//This inner class is the custom CursorAdapter we will use to manage how data is bound to a list item:

private class MyListAdapter extends ResourceCursorAdapter { 

    public MyListAdapter(Context context, Cursor cursor) { 
        super(context, R.layout.inspection_row, cursor);
    } 

    @Override
    public void bindView(View view, Context context, Cursor cursor) { 
        TextView title = (TextView) view.findViewById(R.id.inspection_row_item_main_title);
        title.setText(cursor.getString(                            
                cursor.getColumnIndex(RMDbAdapter.INSPECTION_REF)));

        TextView description = (TextView) view.findViewById(R.id.inspection_row_item_description);        

        String companyName = RMUtilities.notEmpty(cursor.getString(cursor.getColumnIndex(
                        RMDbAdapter.INSPECTION_COMPANY)), "Company unknown");
        String inspectionDate = RMUtilities.notEmpty(cursor.getString(cursor.getColumnIndex(
                        RMDbAdapter.INSPECTION_DATE)), "date unknown");
        description.setText("(" + companyName + ", " + inspectionDate + ")");
    }
}


private void createInspection() {
    Intent i = new Intent(this, InspectionEdit.class);
    startActivityForResult(i, ACTIVITY_CREATE);
}


protected void onListItemClick(ListView l, View v, final int pos, final long id){


    Cursor cursor = (Cursor) rmDbHelper.fetchInspection(id);

    String inspectionRef = RMUtilities.notEmpty(cursor.getString(cursor.getColumnIndex( 
            RMDbAdapter.INSPECTION_REF)), "Reference unknown"); 
    String companyName = RMUtilities.notEmpty(cursor.getString(cursor.getColumnIndex( 
            RMDbAdapter.INSPECTION_COMPANY)), "company unknown"); 
    final String inspectionDialogueText = "(" + inspectionRef + ", " + companyName + ")"; 

    super.onListItemClick(l, v, pos, id);
    clickOptionsDialog = new AlertDialog.Builder(InspectionActivity.this)
    .setTitle(inspectionDialogueText)
    .setMessage(R.string.general_text_select_option)
    .setPositiveButton(R.string.general_button_open, new AlertDialog.OnClickListener(){
        public void onClick(DialogInterface dialog, int which) {
            Intent i = new Intent(InspectionActivity.this, AreaActivity.class);
            i.putExtra("intentID", id);
            startActivityForResult(i, ACTIVITY_CREATE);
            }
        })
    .setNeutralButton(R.string.general_button_edit, new AlertDialog.OnClickListener(){
        public void onClick(DialogInterface dialog, int which){
            Intent i = new Intent(InspectionActivity.this, InspectionEdit.class);
            i.putExtra("intentID", id);
            startActivityForResult(i, ACTIVITY_CREATE);
            }
        })

    .setNegativeButton(android.R.string.cancel, new AlertDialog.OnClickListener(){
        public void onClick(DialogInterface dialog, int which){
            clickOptionsDialog.cancel();
            }
        })
    .create();
    clickOptionsDialog.show();

}

Thanks for your help.

Kind regards,

Dave

Akshay
  • 2,506
  • 4
  • 34
  • 55
Scamparelli
  • 756
  • 1
  • 12
  • 28

2 Answers2

1

try to use notifyDataSetChanged() of adapter.

youradapter.notifyDataSetChanged()
Sankar
  • 1,685
  • 2
  • 16
  • 27
0

You need to re-pull the cursor. You are changing the database, so you need to update your cursor, which will cause your list to be updated.

Based on the code you've shown, listCursor.requery() should do the trick for you.

Note that with the newer APIs you should be using CursorLoaders to move the data activity off the UI thread.

Barak
  • 16,318
  • 9
  • 52
  • 84
  • Thanks Barak - that's done the trick. Will look at CursorLoaders but I am devloping for 2.2 at the moment (not sure if that matters though to be fair).. – Scamparelli Aug 23 '12 at 14:47