Problema de CustomItem traverseout()

olá pessoal,
espero que possam me ajudar, estou fazendo uma espécie de DateField que a pessoa pode mudar os campos pelo trackball de forma horizontal ou vertical: h: aumenta ou diminui o valor de campo;
v:muda o campo a ser alterado; para que ele entre no item e edite os valores ou sair do item ele deve teclar no ok.
isso tudo está fucionando :D, todavia da primeira vez que ele clica ok e a pessoa move o trackball para qualquer um dos lados o metódo chamado é o traverseout() e não o traverse() fazendo com que o foco saia do item… mas uma vez que a pessoa volta pro item ela não sai sem ser apertando ok e consegue editar os campos tranquilamente. será que alguem pode me ajudar??

	protected boolean traverse(int dir, int viewportWidth, int viewportHeight,
			int[] visRectInout) {
		switch (dir) {
		case Canvas.UP:
			if (entra) {
				movePraCima();
			}
			return entra;
		case Canvas.LEFT:
			if (entra) {
				moveProLado();
			}
			return entra;
		case Canvas.DOWN:
			if (entra) {
				movePraBaixo();
			}
			return entra;
		case Canvas.RIGHT:
			if (entra) {
				moveProLado();
			}
			return entra;
		case NONE:
			return true;
		}
		return false;
	}

	protected void keyPressed(int keyCode) {
		if (keyCode == -5) {
			if (entra) {
				entra = false;
				selec = 0;
			} else {
				entra = true;
				selec = selHr;
			}
			repaint();
		}
	}

Creio que tem que fazer um controle da 1a vez que entra no traverse, tipo marcar uma flag. ai é só ficar controlando…
Já passei exatamente por esse problema é é falta de controle no traverse que gera isso… Dá uma depurada que vai perceber…

Outra coisa, não acho legal integrar um command com um customitem. pra mim perde o encapsulamento…

Boa sorte…

antes de mais nada muito obrigado, sua resposta foi muito aguardada.

resolvi o problema mais ou menos.
só que quando entra no campo ele já pode alterar os valores do campo…
foi assim:

[code]protected boolean traverse(int dir, int viewportWidth, int viewportHeight,
int[] visRectInout) {

	System.out.println("rolou");
	switch (dir) {
	case Canvas.UP:
		movePraCima();
		break;
	case Canvas.LEFT:
		moveProLado();
		break;
	case Canvas.DOWN:
		movePraBaixo();
		break;
	case Canvas.RIGHT:
		moveProLado();
		break;
	case NONE:
		return true;
	}
	if (cont==0) {
		keyPressed(-5);
                                            cont++;
	}
	
	return entra;
}

[/code]
e depois eu zero o contador no traversseout()

não entendi o que vc falou nesta frase:
não acho legal integrar um command com um customitem. pra mim perde o encapsulamento…

onde vc me viu fazer isso?? não entendi!!

muito obrigado, cara.

É que eu achei que para o customitem perder o foco você estaria usando um command. Mas se não é o caso eu entendi mal…

muito obrigado,
problema resolvido!