BlackBerry Storm 9530 Rasting Touch Events enquanto rola
-
25-09-2019 - |
Pergunta
Ei, na minha tela, há um campo de edição e 2 campos de botão personalizados como "ok" e "cancelar" abaixo Buttonfield, existem alguns campos de etiquetas mais focussáveis
Quando escrevo um nome no campo Editar e pressionar Enter, o Focus chega ao botão "OK", mas como definir o botão "Cancelar".
Além disso, enquanto rolar o foco não avança automaticamente ???
O que fazer pode estar confuso com eventos de toque e seu manuseio !!!
Por favor, ajuda !!!!!!!!!!!!
Código:
txt_Name = new EditField(TextField.NO_NEWLINE)
{
public void paint(net.rim.device.api.ui.Graphics g)
{
g.setColor(Color.MAROON);
super.paint(g);
}
};
txt_Name.setFont(font);
v1 = new VerticalFieldManager();
v1.add(txt_Name );
ButtonField btn1 = new ButtonField("OK",ButtonField.CONSUME_CLICK);
ButtonField btn2 = new ButtonField("CANCEL",ButtonField.CONSUME_CLICK);
v2 = new VerticalFieldManager();
v2.add(btn1);
v2.add(btn2);
LabelField l1 = new LabelField("Hello Moon ",Field.Focussable);
LabelField l2 = new LabelField("Hello Citizen",Field.Focussable);
LabelField l3 = new LabelField("Hello People",Field.Focussable);
LabelField l4 = new LabelField("Hello world",Field.Focussable);
v3 = new VerticalFieldManager();
v3.add(l1);
v3.add(l2);
v3.add(l3);
v3.add(l4);
add(v1);
add(v2);
add(v3);
}
protected boolean navigationClick(int status, int time)
{
if(OK.isFocus())
{
//execute some code
return true;
}
if(CANCEL.isFocus())
{
//execute some code
return true;
}
}
Solução 2
txt_Name = new EditField(TextField.NO_NEWLINE)
{
public void paint(net.rim.device.api.ui.Graphics g)
{
g.setColor(Color.MAROON);
super.paint(g);
}
};
txt_Name.setFont(font);
v1 = new VerticalFieldManager();
v1.add(txt_Name );
ButtonField btn1 = new ButtonField("OK",ButtonField.CONSUME_CLICK);
ButtonField btn2 = new ButtonField("CANCEL",ButtonField.CONSUME_CLICK);
h2 = new HorizontalalFieldManager();
h2.add(btn1);
h2.add(btn2);
LabelField l1 = new LabelField("Hello Moon ",Field.Focussable);
LabelField l2 = new LabelField("Hello Citizen",Field.Focussable);
LabelField l3 = new LabelField("Hello People",Field.Focussable);
LabelField l4 = new LabelField("Hello world",Field.Focussable);
v3 = new VerticalFieldManager();
v3.add(l1);
v3.add(l2);
v3.add(l3);
v3.add(l4);
add(v1);
add(h2);
add(v3);
}
protected boolean navigationClick(int status, int time)
{
int index = h2.getFieldwithFocusIndex();
if(h2==0)
{
//execute some code for OK
return true;
}
if(h2==1)
{
//execute some code for cancel
return true;
}
}
Outras dicas
Fiz como Mark sugeriu, separe o campo de campo de fieldelisteners para cada botão:
class Scr extends MainScreen {
EditField txt_Name;
ButtonField btnOK;
ButtonField btnCancel;
VerticalFieldManager v1;
VerticalFieldManager v2;
VerticalFieldManager v3;
Font font = Font.getDefault().derive(Font.BOLD, 20);
public Scr() {
txt_Name = new EditField(TextField.NO_NEWLINE) {
public void paint(net.rim.device.api.ui.Graphics g) {
g.setColor(Color.MAROON);
super.paint(g);
}
};
txt_Name.setFont(font);
v1 = new VerticalFieldManager();
v1.add(txt_Name);
btnOK = new ButtonField("OK", ButtonField.CONSUME_CLICK);
btnOK.setChangeListener(
new FieldChangeListener(){
public void fieldChanged(Field field, int context) {
Dialog.inform("OK pressed");
}});
btnCancel = new ButtonField("Cancel", ButtonField.CONSUME_CLICK);
btnCancel.setChangeListener(
new FieldChangeListener(){
public void fieldChanged(Field field, int context) {
Dialog.inform("Cancel pressed");
}});
v2 = new VerticalFieldManager();
v2.add(btnOK);
v2.add(btnCancel);
LabelField l1 = new LabelField("Hello Moon", Field.FOCUSABLE);
LabelField l2 = new LabelField("Hello Citizen", Field.FOCUSABLE);
LabelField l3 = new LabelField("Hello People", Field.FOCUSABLE);
LabelField l4 = new LabelField("Hello world", Field.FOCUSABLE);
v3 = new VerticalFieldManager();
v3.add(l1);
v3.add(l2);
v3.add(l3);
v3.add(l4);
add(v1);
add(v2);
add(v3);
}
}
Agora parece estar bem:
TEXTO DE ALT HTTP://img40.imageshack.us/img40/6472/textered.jpg ALT TEXTO http://img59.imageshack.us/img59/7574/okpressed.jpg TEXTO DE ALT HTTP://IMG641.IMAGESHACK.US/IMG641/9246/CANCELPRESSED01.JPG
ATUALIZAR
Swati, posso clicar nesses botões com simulador de tempestade usando um clique do mouse. Não consigo encontrar nenhuma outra explicação além do arquivo de bacalhau no simulador é da versão antiga. Você pode verificar rapidamente alterando qualquer texto do rótulo no código e implantando e verificar se essa alteração será aplicada no aplicativo no dispositivo. Caso se não, esta é a versão antiga e você deve limpar o simulador e implantar o aplicativo mais uma vez.
Espero que isso ajude você!
Veja também BlackBerry - as mudanças não estão se refletindo no meu aplicativo
Você pode controlar a ordem de foco substituindo o método "NavegationMovement" na tela ou gerente que contém os campos focalizáveis, como os botões OK e Cancelar. Basta avaliar os argumentos transmitidos a esse método, definir foco no campo desejado usando o campo.setFocus () e retornar true.
Quanto ao foco não avançando com a rolagem - é assim que a interface do usuário da tela sensível ao toque funciona. O foco só se move quando você toca em um campo focável - por isso, se você não estiver tocando em nenhum campo focado quando "sacuda" a tela para rolar, o foco não mudará.