Создание собственного диалогового окна ввода в Blackberry - PullRequest
0 голосов
/ 26 марта 2012

Привет, я новичок в Blackberry и пытаюсь создать настраиваемое диалоговое окно ввода для события щелчка меню в Blackberry 7.0. Все работает нормально, единственная проблема в том, что я не могу получить строку текстового поля, присутствующего в диалоговом окне.

public class MyScreen extends MainScreen implements FieldChangeListener
{
String host;
private MenuItem mu;
Dialog dg;
TestDialog td;

public MyScreen()
{    
    final String choices[] = {"Ok","Cancel"};
    final int values[] = {Dialog.OK,Dialog.CANCEL};

    mu=new MenuItem("Configure IP", 1, 1){
        public void run()
        {
            UiApplication.getUiApplication().invokeLater(new Runnable()
            {
                public void run()
                {
                    td=new TestDialog(choices, values);
                    dg=new TestDialog(choices, values);
                    int iResponse = dg.doModal();
                    if(iResponse == 0)
                    {
                        String url=td.getUsernameFromField();
                        if(url.equals(""))
                        {
                            Dialog.alert("Empty");
                        }
                else
                {
                    Dialog.alert("Not Empty");
                }
                    }
                    else
                    {
                        System.out.println("Cancel Presses");
                    }   
                }
            });         
        }
    };

    addMenuItem(mu);
    setTitle("Custom Dialog box");
   }
 }



final class TestDialog extends Dialog{

public RichTextField rd;

public TestDialog(String choices[],int values[]){
    super("Enter Host address", choices,values,Dialog.OK,       
 Bitmap.getPredefinedBitmap(Bitmap.INFORMATION), Dialog.GLOBAL_STATUS);

    rd=new RichTextField();
    add(rd);
    rd.setEditable(true);
    XYEdges thickPadding = new XYEdges(10, 10, 10, 10);
    Border roundedBorder = BorderFactory.createRoundedBorder(thickPadding,   
     Border.STYLE_SOLID);
    rd.setBorder(roundedBorder);
 }    

  public String getUsernameFromField(){
    return rd.getText();
  }
 }

Таким образом, запустив код, открывается диалоговое окно ввода после нажатия кнопки меню. Теперь, если я введу что-нибудь в текстовое поле и нажму кнопку ОК, я получу значение String url == "", и я получу диалоговое окно с надписью пусто. Я просто хочу это значение текстового поля. Пожалуйста, помогите, я застрял на этом ...

Ответы [ 2 ]

0 голосов
/ 26 марта 2012

@ AMUL, если вы не получаете событие щелчка по перкулярной кнопке, чем вы можете также реализовать альтернативное решение для этого.Реализуйте PopupScreen и это выглядит как Dialog .. проверьте код ниже, вы можете легко получить событие щелчка поля perticular button.

import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.FieldChangeListener;
import net.rim.device.api.ui.UiApplication;
import net.rim.device.api.ui.XYEdges;
import net.rim.device.api.ui.component.ButtonField;
import net.rim.device.api.ui.component.Dialog;
import net.rim.device.api.ui.component.RichTextField;
import net.rim.device.api.ui.container.PopupScreen;
import net.rim.device.api.ui.container.VerticalFieldManager;
import net.rim.device.api.ui.decor.Border;
import net.rim.device.api.ui.decor.BorderFactory;

public class CustomDialog extends PopupScreen implements FieldChangeListener
{   
    public RichTextField rd;
    ButtonField btnOK,btnCancel;

public CustomDialog()
{
    super(new VerticalFieldManager());

    rd=new RichTextField();
    rd.setEditable(true);
    XYEdges thickPadding = new XYEdges(10, 10, 10, 10);
    Border roundedBorder = BorderFactory.createRoundedBorder(thickPadding,Border.STYLE_SOLID);
    rd.setBorder(roundedBorder);

    btnOK = new ButtonField("OK");
    btnOK.setChangeListener(this);

    btnCancel = new ButtonField("Cancel");
    btnCancel.setChangeListener(this);


    add(rd);
    add(btnOK);
    add(btnCancel);
}

public void fieldChanged(Field field, int context)
{
    // TODO Auto-generated method stub
    if (field == btnOK)
    {
        UiApplication.getUiApplication().invokeLater(new Runnable() {

            public void run() {
                // TODO Auto-generated method stub
                Dialog.alert(rd.getText());
            }
        });

    }
    else if(field == btnCancel)
    {
        close();
    }
}

public void close() {
    close();
    super.close();
}

} 


Push this screen on your Menu button click event or where ever u want.  hopw it helps !!! 
0 голосов
/ 26 марта 2012

Используйте navigationClick в вашем TestDialog class, как это. protected boolean navigationClick(int status, int time) { Dialog.alert(rd.getText()); return true; } это будет работать ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...