2012-05-24 4 views
0

Я создаю Таблицу Модель адаптер в Blackberry (**Это пример того, что им делать ****) Я добавил кнопку поле и два Строки. Я помещаю данные в String из vector.Now при нажатии кнопки. Я хочу удалить строку против кнопки. Данные удаляются из базы данных, но не удаляются из экрана, когда нажимается кнопка. Когда я отключу функцию Retrieve() для вызова обновленной базы данных и повторного рисования адаптера модели таблицы .... он добавляет новую таблицу ниже старой ... не обновляя ее. Есть ли какое-либо решение для отображения обновленных данных в одной таблице.Освежающей Таблица Модель адаптер на удаление записи из него:. Blackberry

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; 
} 
    } 
+0

Кто-нибудь есть какие-либо идеи rearding это ????? .... плз скажите мне ..... – optimus

ответ

0

Что нужно учитывать, так это то, что пользовательский интерфейс Blackberry Table UI соответствует шаблону проектирования MVC. Значит, данные обновляются в модели.

Как, например:

Object yes = (Object)"Yes"; 
// gets the Model attached to this View 
TableModel tm = (TableModel)view.getModel(); 
// updates the data attached to the row 
tm.setElement(rowIndex, columnIndex, yes); 
tm.modelReset();