2012-06-01 2 views
1

У меня есть tp place AutoCompleteField на одном из моих экранов в приложении Blackberry. Я должен показать текст держателя места, чтобы дать подсказку для ввода пользователем информации.Текст владельца места на автозагрузке в Blackberry

Вот ниже код AutoCompleteField

BasicFilteredList filterList = new BasicFilteredList(); 
     String[] address = { "T 115 Centro Galleria Shopping Centre, Cnr Old Collier and Walters Road Morley WA 1522", 
       "1423 SEAVIEW POINT POINT COOK VIC 2674", 
       "Lot 1498 Yarraman Road Wyndham Vale VIC 3795", 
       "Lot 3506 Witchmount Close Hillside VIC 4055", 
       "6 Paas Place Williamstown VIC 4233", 
       "Lot 99 14 James Close Sunbury VIC 4502", 
       "1 Charlotte Street Clayton South VIC 4779" }; 

     filterList.addDataSet(1, address, "address", BasicFilteredList.COMPARISON_IGNORE_CASE); 
     AutoCompleteField autoCompleteField = new AutoCompleteField(filterList){ 
      public void onSelect(Object selection, int SELECT_TRACKWHEEL_CLICK) { 
       ListField _list = getListField(); 
       if (_list.getSelectedIndex() > -1) { 
        if(selectedText!=null){ 
         BasicFilteredListResult result = (BasicFilteredListResult) selection; 
         selectedText.setText(result._object.toString()); 
        } 
       } 
      } 
     }; 
     add(autoCompleteField); 

Любой, пожалуйста, предложите мне, как я мог бы осуществить то же самое.

Спасибо.

ответ

2

Вы можете использовать подобную технику для the one shown here for normal EditFields. В принципе, вам необходимо переопределить метод paint() в подклассе AutoCompleteField. В поле paint() вы проверяете, не пустое поле, и если да, вы вручную нарисуете нужный текст .

Разница в том, что AutoCompleteField является Manager с его внутренним элементом BasicEditField. Итак, чтобы правильно нарисовать текст, вам нужно выяснить смещения x и y поля редактирования в родительском Manager (AutoCompleteField).

Итак, замените AutoCompleteField экземпляр с экземпляром этого класса:

private class CustomAutoCompleteField extends AutoCompleteField { 
     private int yOffset = 0; 
     private int xOffset = 0; 

     public CustomAutoCompleteField(BasicFilteredList filteredList) { 
     super(filteredList); 
     } 

     protected void paint(Graphics g) { 
     super.paint(g); 
     if (xOffset == 0) { 
      // initialize text offsets once 
      xOffset = getEditField().getContentLeft(); 
      yOffset = getEditField().getContentTop(); 
     } 
     String text = getEditField().getText(); 
     if (text == null || text.length() == 0) { 
      int oldColor = g.getColor(); 
      g.setColor(Color.GRAY); 
      g.drawText("enter text", xOffset, yOffset); 
      g.setColor(oldColor); 
     } 
     } 

     public void onSelect(Object selection, int SELECT_TRACKWHEEL_CLICK) { 
     ListField _list = getListField(); 
     if (_list.getSelectedIndex() > -1) { 
      if(selectedText!=null){ 
       BasicFilteredListResult result = (BasicFilteredListResult) selection; 
       selectedText.setText(result._object.toString()); 
      } 
     } 
     } 
    } 

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

Редактировать: Приведенный выше код представлен с предупреждением, что ваш метод onSelect() явно полагается на код, который не показан. Как и в случае, приведенный выше код не будет компилироваться. Я оставил onSelect() там, чтобы показать, что я по существу просто заменяю анонимный класс, который у вас был первоначально, и не делал ничего другого в вашем методе onSelect(), так как он напрямую не связан с проблемой текста заполнителя.

+0

Спасибо Нейт. Я это попробую. –

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