2015-07-15 1 views
0

привет, я новичок в blackberry.i, будет иметь две кнопки для добавления строк и прочее для удаления строк.с использованием таблицы для хранения векторов, содержащей настроенные растровые изображения и поля редактирования

|--------------------------------------------| 
||----------------------------------||------|| 
||labelfield      ||Bitmap|| 
||__________________________________||______|| 
|____________________________________________| 
|--------------------------------------------| 
| Editfield        | 
|--------------------------------------------| 

Выше настраиваются видом DatePicker, где при щелчке растрового Datepicker всплывающих окон, чтобы выбрать дату и что значение даты получить переплетено для редактирования поля, это содержится в одной строке и другая строка содержит поле редактирования, которое позволяет введите сумму, которая должна быть отформатирована как цифры ввода пользователя.

Изначально две строки по умолчанию будут присутствовать, чтобы выбрать дату и ввести сумму. После нажатия кнопки добавления эти две строки должны быть добавлены. И эти значения строк будут извлекаться по мере необходимости.

Аналогичным образом при нажатии кнопки удаления эти две строки будут удалены. Если пользователю необходимо добавить следующие две строки, должны быть заполнены предыдущие строки.

код я использовал для DatePicker приведен ниже

VerticalFieldManager datevertfield = new VerticalFieldManager(); 
String pattern = "MM/dd/yyyy"; 
String dateInString = new SimpleDateFormat(pattern).format(new Date()); 

    LabelField lblcal1 = new LabelField("Date", DrawStyle.LEFT 
      | Field.FIELD_LEFT) { 

     public void paint(Graphics g) { 
      g.setColor(0xffffff); 
      super.paint(g); 
     } 
    }; 
    datevertfield.add(lblcal1); 
    HorizontalFieldManager datepickerHoriztalField = new  HorizontalFieldManager(); 
    HorizontalFieldManager dateHoriztalField = new HorizontalFieldManager()  
    { 
     protected void sublayout(int maxWidth, int maxHeight) { 
      super.sublayout(Display.getWidth() - horiwidth, horiheight); 
      setExtent(Display.getWidth() - horiwidth, horiheight); 
     } 
    }; 
    XYEdges xyEdge1 = new XYEdges(border, border, border, border); 
    XYEdges xyEdgeColors1 = new XYEdges(0x2AACFF, 0x2AACFF, 0x2AACFF, 
      0x2AACFF); 
    Border aBorder1 = BorderFactory.createSimpleBorder(xyEdge1, 
      xyEdgeColors1, Border.STYLE_SOLID); 

    dateHoriztalField.setBorder(aBorder1); 
    datepickerHoriztalField.add(dateHoriztalField); 
    BitmapField iconimg = new BitmapField(
      GPATools.ResizeTransparentBitmap(
        Bitmap.getBitmapResource("Calender.png"), 
        imgwidth, imgheight, Bitmap.FILTER_LANCZOS, 
        Bitmap.SCALE_TO_FIT), Field.FOCUSABLE) { 
    protected boolean navigationClick(int status, int time) { 
      try { 
       DateTimePicker datePicker = DateTimePicker.createInstance(); 
       datePicker.doModal(); 

       Calendar cal = datePicker.getDateTime(); 
       datePicker.setMaximumDate(cal.getInstance()); 
       Date curtime = cal.getTime(); 

       DateFormat formattertime = new SimpleDateFormat(
         "MM/dd/yyyy"); 
       String currentTime = formattertime.format(curtime); 
       txtpickdate.setText(currentTime); 
      } catch (Exception e) { 

      } 
      return true; 
     } 
    }; 
     txtpickdate = new LabelField("Enter Date", DrawStyle.LEFT 
      | Field.FIELD_LEFT) { 
     protected void paint(Graphics g) { 
      g.setColor(Color.WHITE); 
      super.paint(g); 
     } 
    }; 
    dateHoriztalField.add(txtpickdate); 
    datepickerHoriztalField.add(iconimg); 
    datevertfield.add(datepickerHoriztalField); 
    add(datevertfield); 

Это код, используемый для выбора даты строки, как это я хочу добавить datepiker строки и следующую строку редактирования поля на щелчке butn й это может удаляться при нажатии кнопки delete btn. В этом я должен знать, как добавлять и удалять эти строки и как узнать, ввел ли пользователь предыдущую строку даты и редактирования, чтобы выполнить проверку.

Может ли кто-нибудь дать мне представление о том, как начать с этого. Пример кода будет оценен.

+0

Вы должны задать вопрос по конкретной проблеме, это слишком широкое, чтобы даже надеяться на ответ. В этом случае лучшим вариантом было бы создание настраиваемого поля, управляющего его состоянием. На вашем экране у вас будет относительно чистый код, так как вы просто добавите поле x количество раз и удалите с помощью обратного вызова – Kevin

+0

@Kevin Plz посмотрите на новый добавленный код. Представьте себе, как это сделать. – allDroid

ответ

0

Я не уверен, если я понял вопрос или нет, но от того, что я понимаю, вы ищете:

  • метку & Кнопка для выбора Дата
  • EditField ограничивается числовым текстом
  • Кнопка для создания поля с датой и номером
  • Создано поля могут быть удалены

Я создал маленький пример для этого. Я не включил ограничение количества в текстовое поле, но остальное должно быть достойной базой для начала. Я бы порекомендовал не использовать BitmapField в качестве кнопки, потому что это не будет хорошо для ux. Скорее всего, вам понадобится поле с изображениями для каждого состояния (нет, сфокусировано, нажато).

public final class MyScreen extends MainScreen 
{ 
    private Calendar calendar; 
    private LabelField labelField; 
    private BitmapField bitmapField; 
    private EditField editField; 
    private SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyyy"); 

    public MyScreen() 
    { 
     super(NO_HORIZONTAL_SCROLL); 

     // ----- TODO ------ 
     // Too lazy to include a bmp, so I generated one. You should replace this with your icon 
     Bitmap bmp = new Bitmap(50, 50); 
     Graphics g = Graphics.create(bmp); 
     g.setColor(0xEFEFEF); 
     g.fillRect(0, 0, bmp.getWidth(), bmp.getHeight()); 
     // ------------------ 

     bitmapField = new BitmapField(bmp, FOCUSABLE) 
     { 
      protected boolean navigationClick(int status, int time) 
      { 
       if (calendar == null) 
       { 
        calendar = Calendar.getInstance(); 
       } 

       DateTimePicker datePicker = DateTimePicker.createInstance(calendar); 
       datePicker.doModal(); 

       calendar = datePicker.getDateTime(); 
       if (calendar == null) 
       { 
        labelField.setText("null"); // Your error message here 
       } 
       else 
       { 
        labelField.setText(formatter.format(calendar.getTime())); 
       } 
       return true; 
      } 
     }; 
     labelField = new LabelField(null, USE_ALL_WIDTH) // Tell labelField to use as much width as possible 
     { 
      protected void layout(int width, int height) 
      { 
       // Layout the label as though less space is available (to fit the bitmap button in) 
       super.layout(width - bitmapField.getBitmapWidth(), height); 
      } 
     }; 

     HorizontalFieldManager manager = new HorizontalFieldManager(USE_ALL_WIDTH); 
     add(manager); 
     manager.add(labelField); 
     manager.add(bitmapField); 

     editField = new EditField(USE_ALL_WIDTH); 
     add(editField); 

     ButtonField addButton = new ButtonField("ADD") 
     { 
      protected boolean navigationClick(int status, int time) 
      { 
       String text = editField.getText(); 
       if ((calendar != null) && (text != null) && (text.length() > 0)) 
       { 
        add(new EntryField(calendar.getTime(), text)); 
       } 
       else 
       { 
        // TODO notify invalid data? 
       } 
       return true; 
      } 
     }; 

     add(addButton); 
    } 

    public class EntryField extends HorizontalFieldManager 
    { 
     public EntryField(Date date, String text) 
     { 
      super(USE_ALL_WIDTH); 

      // ----- TODO ------ 
      // Too lazy to include a bmp, so I generated one. You should replace this with your icon 
      Bitmap bmp = new Bitmap(50, 50); 
      Graphics g = Graphics.create(bmp); 
      g.setColor(0xFF0000); 
      g.fillRect(0, 0, bmp.getWidth(), bmp.getHeight()); 
      // ------------------ 

      final BitmapField bitmapField = new BitmapField(bmp, FOCUSABLE) 
      { 
       protected boolean navigationClick(int status, int time) 
       { 
        EntryField.this.getManager().delete(EntryField.this); // Remove this field from its parent 
        // Depending on what kind of interactions this field exposes, this will most likely need to make use of a callback instead. 

        return true; 
       } 
      }; 

      final LabelField labelField = new LabelField(formatter.format(date) + " - " + text, USE_ALL_WIDTH) // Tell labelField to use as much width as possible 
      { 
       protected void layout(int width, int height) 
       { 
        // Layout the label as though less space is available (to fit the bitmap button in) 
        super.layout(width - bitmapField.getBitmapWidth(), height); 
       } 
      }; 

      add(labelField); 
      add(bitmapField); 
     } 
    } 
} 
+0

Мне нужно добавить поле редактирования поля и даты, чтобы пользователь вводил дату, нажав на значок календаря. Но в вашем коде я получаю эти поля, которые уже были введены ранее в начале до нажатия кнопки clciking. Мне нужна кнопка «Удалить» рядом с надписью «Добавить» Но так, что на clcik delete, но последний введенный поле Edit и поле datepicker должны быть удалены. Главное, что когда-либо пользователь вводил поле даты и поля метки, эти данные должны отправляться на службу во время вызова службы, так как я могу хранить эти значения и извлекать эти значения с помощью векторов. – allDroid

Смежные вопросы