Welcome!

Welcome to the official BlackBerry Support Community Forums.

This is your resource to discuss support topics with your peers, and learn from each other.

inside custom component

Java Development

Reply
Developer
eraman
Posts: 34
Registered: ‎03-08-2012
My Device: Simulator

Refreshing Table Model Adapter on deleting record from it : Blackberry

I m creating a Table Model Adapter in Blackberry.(**This is a sample what i m doing****)I have added button field and two Strings.I m putting data in String from vector.Now on button click i want to delete the row against button.The Data is deleted from the database but not removed from Screen view when button is clicked.When i calld the Retrieve() function to call updated database and draw the Table model adapter again....it is adding new Table below old one....not refreshing it. Is there any solution to show the refreshed data in same table.

 

package mypackage;

   import java.util.Vector;
   import net.rim.device.api.system.Display;
   import net.rim.device.api.ui.Color;
   import net.rim.device.api.ui.Field;
   import net.rim.device.api.ui.FieldChangeListener;
   import net.rim.device.api.ui.Manager;
   import net.rim.device.api.ui.XYRect;
   import net.rim.device.api.ui.component.ButtonField;
   import net.rim.device.api.ui.component.LabelField;
   import net.rim.device.api.ui.component.table.DataTemplate;
   import net.rim.device.api.ui.component.table.TableController;
   import net.rim.device.api.ui.component.table.TableModelAdapter;
   import net.rim.device.api.ui.component.table.TableView;
   import net.rim.device.api.ui.component.table.TemplateColumnProperties;
   import net.rim.device.api.ui.component.table.TemplateRowProperties;
   import net.rim.device.api.ui.container.MainScreen;
   import net.rim.device.api.ui.decor.BackgroundFactory;

  public final class MyScreen extends MainScreen implements FieldChangeListener 
 {
private DeviceTableModelAdapter _tableModel;
private Vector _cities;
private static final int NUM_ROWS = 1;
    private static final int ROW_HEIGHT = 50;
    private static final int NUM_COLUMNS = 3;
    public ButtonField btn;

   public MyScreen(){
    super(Manager.NO_VERTICAL_SCROLL);

    _cities = new Vector();
    _tableModel = new DeviceTableModelAdapter();

    Vector sample =new Vector();
    sample.addElement("Newyork");
    sample.addElement("NewDelhi");
    sample.addElement("NewOrleans");
    int ik = 0;
       while(ik < sample.size())
       {
           String modelNumber = sample.elementAt(ik).toString();
           String modelName = "-Earth-";
           String ne = String.valueOf(ik);
           Object[] row = {modelName, modelNumber, ne};
           _tableModel.addRow(row);
           ik++;
       }

     TableView tableView = new TableView(_tableModel);
         tableView.setDataTemplateFocus(BackgroundFactory.createLinearGradientBackground(Color.WHITE, Color.WHITE, Color.BLUEVIOLET, Color.BLUEVIOLET));
     TableController tableController = new TableController(_tableModel, tableView);
     tableController.setFocusPolicy(TableController.ROW_FOCUS);
     tableView.setController(tableController);

     // Specify a simple data template for displaying 3 columns
     DataTemplate dataTemplate = new DataTemplate(tableView, NUM_ROWS, NUM_COLUMNS)
     {
         public Field[] getDataFields(int modelRowIndex)
         {
             Object[] data = (Object[]) (_tableModel.getRow(modelRowIndex));
             Field[] fields = {getButtonFieldObject((String)data[0]), new LabelField((String) data[1]), new LabelField((String) data[2])};
             return fields;
         }
     };

     dataTemplate.useFixedHeight(true);
     // Define regions and row height
     dataTemplate.setRowProperties(0, new TemplateRowProperties(ROW_HEIGHT));

     for(int i = 0; i < NUM_COLUMNS; i++)
     {
         dataTemplate.createRegion(new XYRect(i, 0, 1, 1));
         dataTemplate.setColumnProperties(i, new TemplateColumnProperties(Display.getWidth() / NUM_COLUMNS));
     }
     // Apply the template to the view

     tableView.setDataTemplate(dataTemplate);

     add(tableView);
}
public void fieldChanged(Field arg0, int arg1) {

/***    tableView.DeleteAll();  ****/

   /**** calling Class again to draw the table Modal Adapter again with updated value *******/

}
private final static class City
{
    private String _name;
    private String _region;
    private String _image;
    City(String name, String region, String image)
    {
        _name = name;
        _region = region;
        _image = image;
    }

    public String getName()
    {
        return _name;
    }
    public String getRegion()
    {
        return _region;
    }
    public String getImage()
    {
        return _image;
    }
}

 private class DeviceTableModelAdapter extends TableModelAdapter
    {
        public int getNumberOfRows()
        {
            return _cities.size();
        }
        public int getNumberOfColumns()
        {
            return NUM_COLUMNS;
        }
        protected boolean doAddRow(Object row)
        {
            Object[] arrayRow = (Object[]) row;
            _cities.addElement(new City((String) arrayRow[0], (String) arrayRow[1], (String) arrayRow[2]));
            return true;
        }
        protected Object doGetRow(int index)
        {
            City city = (City) _cities.elementAt(index);

            Object[] row = {city.getImage(), city.getRegion(), city.getName()};

            return row;

        }

    }
 public ButtonField getButtonFieldObject(String arg){

     btn = new ButtonField(arg,ButtonField.CONSUME_CLICK);
     btn.setChangeListener(this);
     return btn;
 }
     }

 

Developer
crispyoz
Posts: 223
Registered: ‎10-01-2011
My Device: Bold 9900

Re: Refreshing Table Model Adapter on deleting record from it : Blackberry

I just called invalidate and it refreshes my table view fine.

Developer
eraman
Posts: 34
Registered: ‎03-08-2012
My Device: Simulator

Re: Refreshing Table Model Adapter on deleting record from it : Blackberry

manager.invalid()........not working in my code.....should i put it at that place where i have defined the button change listener or any specific place?????........plz tell me
Developer
crispyoz
Posts: 223
Registered: ‎10-01-2011
My Device: Bold 9900

Re: Refreshing Table Model Adapter on deleting record from it : Blackberry

I invalidate the screen not the manager:   myscreen.Invalidate();  

Developer
eraman
Posts: 34
Registered: ‎03-08-2012
My Device: Simulator

Re: Refreshing Table Model Adapter on deleting record from it : Blackberry

but i don't want to invalidate the whole screen....i just want to refresh the table portion as rest screen stays as it is...................any other suggestion ?????
Developer
crispyoz
Posts: 223
Registered: ‎10-01-2011
My Device: Bold 9900

Re: Refreshing Table Model Adapter on deleting record from it : Blackberry

Invalidating the screen is what fixed it for me, granted this is not ideal but frankly I find the BB API somewhat limited.  

Developer
eraman
Posts: 34
Registered: ‎03-08-2012
My Device: Simulator

Re: Refreshing Table Model Adapter on deleting record from it : Blackberry

plz tell me if any other method to solve this problem.....