2015-03-24 1 views
0

Я разрабатываю приложение, в котором я добавляю и удаляю поля на основе флага установки в true или false.but, что я пытаюсь сделать, это если я нажму на поле, которое поле должно расширяться в то время как другие свернуты (даже если она расширена) я гугл его, но я не получил решение, пожалуйста, помогите мне, я новичок в ежевику JavaРасширение одного поля, в то время как другие рухнули в blackberry java

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

public final class MyScreen extends MainScreen implements 
FieldChangeListener 
{ 
    /** 
    * Creates a new MyScreen object 
    */ 
    private VerticalFieldManager main_manager; 
    private HorizontalFieldManager parentNodes; 
    private LabelField parent_lables[]; 
    private Bitmap bitmap,upbitmap; 
    private BitmapField bitmap_field[]; 
    private VerticalFieldManager submanager[]; 
    private int sizeOfParentNodes=3; 
    private int sizeOfChildNodes=5; 
    private static boolean flag[]; 

    public MyScreen() 
    {   
     // Set the displayed title of the screen  
     bitmap=Bitmap.getBitmapResource("arrow.png"); 
     upbitmap=Bitmap.getBitmapResource("uparrow.png"); 
     main_manager=new 
    VerticalFieldManager(Manager.VERTICAL_SCROLL|VERTICAL_SCROLLBAR){ 
      protected void sublayout(int maxWidth, int maxHeight) { 
       super.sublayout(Display.getWidth(), Display.getHeight()); 
       setExtent(Display.getWidth(), Display.getHeight()); 
      }; 
     }; 
     parent_lables=new LabelField[sizeOfParentNodes]; 
     flag=new boolean[sizeOfParentNodes]; 
     submanager=new VerticalFieldManager[sizeOfParentNodes]; 
     bitmap_field=new BitmapField[sizeOfParentNodes]; 
     for(int i=0;i<sizeOfParentNodes;i++) 
     { 
      submanager[i]=new VerticalFieldManager(); 
      updateGUI(i); 
      main_manager.add(submanager[i]); 
     } 
     add(main_manager); 
    } 

    public void fieldChanged(Field field, int context) { 
     // TODO Auto-generated method stub 
     synchronized (UiApplication.getEventLock()) { 
      for(int i=0;i<sizeOfParentNodes;i++) 
      { if(field==parent_lables[i]) 
       { 
        if(flag[i]==true){ 
         flag[i]=false; 
         submanager[i].deleteAll(); 
         updateGUI(i); 
         parent_lables[i].setFocus(); 
        }else{ 
         flag[i]=true; 
         bitmap_field[i].setBitmap(upbitmap); 

         submanager[i].invalidate(); 
        } 
       } 
      } 
     } 
    } 

    public void updateGUI(int index) 
    { 
     parentNodes=new HorizontalFieldManager(USE_ALL_WIDTH); 
     bitmap_field[index]=new BitmapField(bitmap); 

     parentNodes.add(bitmap_field[index]); 
     parent_lables[index]=new LabelField("Day"+index,Field.FOCUSABLE){ 
      protected boolean navigationClick(int status, int time) { 
       fieldChangeNotify(1); 
       return true; 
      }; 
     }; 
     parentNodes.add(parent_lables[index]); 
     parent_lables[index].setChangeListener(this); 
     submanager[index].add(parentNodes); 
    } 
} 

ответ

0

Я постучала это вместе, и вам, скорее всего, понадобятся некоторые настройки, чтобы получить его именно так, как вы этого хотите, но это должно быть то, от чего вы можете работать. Предполагая, что я правильно понял ваш вопрос.

Вам необходимо создать базовое поле, помощник, способный управлять их списком, и обратный вызов. Тот факт, что вам нужно базовое поле, является самым большим падением, поскольку он немедленно исключает все остальные виджеты, которые у вас есть, так как они должны быть сделаны с нуля с помощью метода paint. Вы можете использовать VerticalFieldManager вместо поля, расширив VerticalFieldManager вместо Field.

В отношении классов java. Мой CollapsableField.java выглядит следующим образом:

public abstract class CollapsableField extends Field 
{ 
    // We make use of a different listener than the FieldChangeListener, since you can only attach one and we will most likely want to do so, we can't "occupy" the listener. 
    private CollapseListener listener; 
    private boolean collapsed; 
    protected int collapsedWidth; 
    protected int collapsedHeight; 

    public CollapsableField() 
    { 
     collapsed = true; 

     // Field is completely collapsed by default 
     collapsedWidth = 0; 
     collapsedHeight = 0; 
    } 

    public void setCollapseListener(CollapseListener listener) 
    { 
     this.listener = listener; 
    } 

    public final boolean isCollapsed() 
    { 
     return collapsed; 
    } 

    public final void collapse() 
    { 
     this.collapsed = true; 
     if (listener != null) 
     { 
      listener.onCollapse(this); 
     } 
     fieldChangeNotify(0); // Notify that the field has changed, so that attached field change listeners will fire 
     updateLayout(); // re-call layout 
    } 

    public final void expand() 
    { 
     this.collapsed = false; 
     if (listener != null) 
     { 
      listener.onExpand(this); 
     } 
     fieldChangeNotify(0); // Notify that the field has changed, so that attached field change listeners will fire 
     updateLayout(); // re-call layout 
    } 

    protected void layout(int width, int height) 
    { 
     if (collapsed) 
     { 
      // Set dimensions to collapsed 
      setExtent(collapsedWidth, collapsedHeight); 
     } 
     else 
     { 
      // Set dimensions to what the extending class specified 
      setExtent(width, height); 
     } 
    } 

    protected final void paint(Graphics graphics) 
    { 
     if (collapsed) 
     { 
      paintCollapsed(graphics); 
     } 
     else 
     { 
      paintExpanded(graphics); 
     } 
    } 

    protected abstract void paintCollapsed(Graphics graphics); 

    protected abstract void paintExpanded(Graphics graphics); 
} 

Группа затем принимает список из них, применяет слушателя к каждому полю, как он добавляется. Когда поле сигнализирует, что оно расширилось, группа сообщит всем другим полям обрушиться. CollapsableGroup.java:

public class CollapsableGroup 
{ 
    private Vector fields; 
    private CollapseListener listener; 

    public CollapsableGroup() 
    { 
     fields = new Vector(); 

     listener = new CollapseListener() 
     { 
      public void onExpand(CollapsableField source) 
      { 
       for (int i = 0; i < fields.size(); i++) 
       { 
        CollapsableField field = (CollapsableField) fields.elementAt(i); 
        if ((!field.isCollapsed()) && (field != source)) 
        { 
         field.collapse(); 
        } 
       } 
      } 

      public void onCollapse(CollapsableField source) 
      { 
       // Don't need to handle this. Method is here just for completeness 
      } 
     }; 
    } 

    public void add(CollapsableField field) 
    { 
     field.setCollapseListener(listener); 
     fields.addElement(field); 
    } 

    public void remove(CollapsableField field) 
    { 
     field.setCollapseListener(null); 
     fields.removeElement(field); 
    } 

    /** 
    * Returns the currently expanded field. Returns <b>null</b> if all fields are collapsed. 
    * 
    * @return 
    */ 
    public CollapsableField getExpandedField() 
    { 
     for (int i = 0; i < fields.size(); i++) 
     { 
      CollapsableField field = (CollapsableField) fields.elementAt(i); 
      if (!field.isCollapsed()) 
      { 
       return field; 
      } 
     } 

     return null; 
    } 

    public void expand(CollapsableField field) 
    { 
     field.expand(); // Listeners should take care of the rest 
    } 

    public void collapseAll() 
    { 
     for (int i = 0; i < fields.size(); i++) 
     { 
      CollapsableField field = (CollapsableField) fields.elementAt(i); 
      if (!field.isCollapsed()) 
      { 
       field.collapse(); 
      } 
     } 
    } 
} 

И, наконец, интерфейс слушателя. CollapseListener.java:

interface CollapseListener 
{ 
    public void onExpand(CollapsableField source); 

    public void onCollapse(CollapsableField source); 
} 

Эти три класса должны быть все, что вам нужно. Следующими классами являются мои примеры/тестовые классы. TestLabel.java пример расширенного класса:

public class TestLabel extends CollapsableField 
{ 
    private String text; 
    private String collapsedText; 

    public TestLabel(String text, String collapsedText) 
    { 
     this.text = text; 
     this.collapsedText = collapsedText; 

     // Tells the layout method to collapse to the size of this text 
     collapsedWidth = getFont().getAdvance(collapsedText); 
     collapsedHeight = getFont().getHeight(); 
    } 

    public int getPreferredWidth() 
    { 
     return getFont().getAdvance(text); 
    } 

    public int getPreferredHeight() 
    { 
     return getFont().getHeight(); 
    } 

    protected void layout(int width, int height) 
    { 
     super.layout(getPreferredWidth(), getPreferredHeight()); 
    } 

    protected void paintCollapsed(Graphics graphics) 
    { 
     // Paints only the collapsedText 
     graphics.drawText(collapsedText, 0, 0); 
    } 

    protected void paintExpanded(Graphics graphics) 
    { 
     // Paints the full Text 
     graphics.drawText(text, 0, 0); 
    } 

    protected boolean touchEvent(TouchEvent message) 
    { 
     // Toggle on mouse press 
     if (message.getEvent() == TouchEvent.CLICK) 
     { 
      if (isCollapsed()) 
      { 
       expand(); 
      } 
      else 
      { 
       collapse(); 
      } 

      return true; 
     } 
     return super.touchEvent(message); 
    } 
} 

Следующий экран содержит некоторые поля, чтобы показать, что и сами и групповые виджеты могут манипулировать поля. MyScreen.java:

public final class MyScreen extends MainScreen 
{ 
    public MyScreen() 
    { 
     // Set the displayed title of the screen 
     setTitle("MyTitle"); 

     final CollapsableGroup group = new CollapsableGroup(); 

     final TestLabel label1 = new TestLabel("Label1", "L1"); 
     label1.setBackground(BackgroundFactory.createSolidBackground(0x999999)); 
     group.add(label1); 

     final TestLabel label2 = new TestLabel("Label2", "L2"); 
     label2.setBackground(BackgroundFactory.createSolidBackground(0xBBBBBB)); 
     group.add(label2); 

     final TestLabel label3 = new TestLabel("Label3", "L3"); 
     label3.setBackground(BackgroundFactory.createSolidBackground(0xDDDDDD)); 
     group.add(label3); 

     ButtonField collapseAll = new ButtonField("Collapse All") 
     { 
      protected boolean navigationClick(int status, int time) 
      { 
       group.collapseAll(); 
       return true; 
      } 
     }; 
     add(collapseAll); 

     ButtonField expand1 = new ButtonField("Expand1") 
     { 
      protected boolean navigationClick(int status, int time) 
      { 
       group.expand(label1); 
       return true; 
      } 
     }; 
     add(expand1); 

     ButtonField expand2 = new ButtonField("Expand2") 
     { 
      protected boolean navigationClick(int status, int time) 
      { 
       group.expand(label2); 
       return true; 
      } 
     }; 
     add(expand2); 

     ButtonField expand3 = new ButtonField("Expand3") 
     { 
      protected boolean navigationClick(int status, int time) 
      { 
       group.expand(label3); 
       return true; 
      } 
     }; 
     add(expand3); 

     add(label1); 
     add(label2); 
     add(label3); 
    } 
} 
+0

Могу ли я получить ваш skypeid Пожалуйста. – allDroid

+0

Я не хочу публиковать что-то подобное. Если вы хотите, мы можем создать чат на SO. – Kevin

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