Jump to content

Recommended Posts

Posted (edited)

Boas pessoal,

Estou neste momento a iniciar-me no mundo do desenvolvimento de software para Android, e estou com problemas, na navegação entre os vários ecrãs de uma aplicação.

Neste momento, o código que tenho para abrir um novo ecrã, é o seguinte:

public void onClick(View v)
{
Intent myIntent = new Intent(v.getContext(), Page2.class);
startActivity(myIntent);
}

A questão, é que desta maneira, a aplicação esta sempre a criar novas activitys, e não estou a conseguir fazer com que ele volte para o ecrã anterior, sem fazer finish() desta nova activity.

Objectivo era que ele fosse abrindo novos ecrãs, e fossem ficando guardados em memória, para que fosse possível navegar entre eles, e continuarem com a informação, que tenha sido adicionada. Por exemplo, uma ecrã que tenha várias textbox's, seja introduzido lá texto, e após mudar de ecrã e voltar, esse texto mantenha-se nas textbox's.

Espero ter-me conseguido explicar.

Desde já, agradeço a vossa colaboração.

Cumprimentos

Miguel Nobre

Edited by M!Gu3L
Posted (edited)

Aquilo que precisas é de uma stack de Activities. Podes impementar uma utilizando a classe ActivityGroup como base:

public class ActivityStack extends ActivityGroup {
 private Stack<String> stack; // stack de IDs



@Override
public void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);

	// primeira actividade na stack
	push("MyActivityID", new Intent(this, MyActivity.class));
}


@Override
public void finishFromChild(Activity child) { pop(); }


@Override
public void onBackPressed() { pop(); }


public void push(String id, Intent intent) {
	Window window = getLocalActivityManager().startActivity(id, intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));

	if (window != null) { stack.push(id); }
}


public void pop() {
	if (stack.size() == 1) { getParent().finish(); } // não existem mais activities na stack, sai da app.

	getLocalActivityManager().destroyActivity(stack.pop(), true);

	if (stack.size() > 0) {
		Intent lastIntent = manager.getActivity(stack.peek()).getIntent();
		Window newWindow = manager.startActivity(stack.peek(), lastIntent);
	}
}
}

Precisas de definir identificadores distintos para cada actividade que abres.

EDIT: Erro meu por não ter lido toda a dúvida.

Em Android não deves manter as actividades em memória. A determinado ponto, o sistema pode querer remover actividades que não estão a ser utilizadas para recuperar memória. A melhor forma de resolveres o problema é guardares o estado da actividade num bundle para ser recuperado quando a activity volta a estar activa.

Em principio, deves olhar para as funções onSaveInstanceState() e onRestoreInstanceState().

Edited by KTachyon

“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Posted (edited)

O que pretendes não é só mostrar uma activity que já está em background, em vez que criares uma nova em cada onClick?

Se sim, é simplesmente fazeres qualquer coisa como isto:

Intent intent = new Intent(_activity, StatusActivity.class)
                .addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);

Ou seja, adicionar uma flag como a Intent.FLAG_ACTIVITY_REORDER_TO_FRONT ao teu Intent.

Edited by AriOps

Daniel Correia

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.