M!Gu3L Posted May 17, 2012 at 07:12 PM Report #456515 Posted May 17, 2012 at 07:12 PM (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 May 17, 2012 at 08:42 PM by M!Gu3L
KTachyon Posted May 18, 2012 at 01:34 AM Report #456578 Posted May 18, 2012 at 01:34 AM (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 May 18, 2012 at 01:42 AM 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
AriOps Posted May 19, 2012 at 10:37 PM Report #456903 Posted May 19, 2012 at 10:37 PM (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 May 19, 2012 at 10:37 PM by AriOps Daniel Correia
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now