PDA

Prikaži potpunu verziju : Android - promena 'formi'


Ivan452
28.1.2011, 0:45
Pozdrav svima,

tek sam poceo da se bavim malo Android programiranjem, ne bih li napravio aplikaciju koja mi je potrebna.

Sada zanima me sledece:
Kako se vrsi promena 'formi' u jednoj android aplikaciji?

Ja sam probao nesto da odradim onako kako je meni delovalo...ali ne mnogo uspesno.
Pa me zanima gde gresim.

Naime, recimo da imam 2 forme tj 2 .xml fajla
na main.xml imam dugme klikom na koje bih trebao da odem na list.xml.
na list.xml imam dugme klikom na koje bih trebao da odem na main.xml.

E sada, ja sam odradio prvi deo. Stavio dugme, napravio onClickListener().
Sa main.xml predjem na list.xml i onda sa list.xml na main.xml
Medjutim to mogu da uradim samo jedanput. Posle toga listeneri kao da vise ne vaze.
Inace sama incijalizacija dugmica i listenera mi je u metodi onCreate()
deklaracija je van nje, tako da ne vidim zasto ne bi radilo?
A samo promenu sam radio samo sa:
setContentView(R.layout.main);
i
setContentView(R.layout.list);

Trazio sam po netu, nasao sam neki nacin kada se radi sa dve Activity klase, i Intentima, ali mi se isti problem javio.

evo da okacim i kod pa ako neko zna i ako ga ne mrzi da baci pogled ako nisam bio jasan u objasnjavanju.


public class test2 extends Activity
{
private static Button btnNewEntry;
private static Button btnBack;
private static Button btnList;
private static Button btnBackFromTheList;
private static String NOTES666="notes666.txt";


/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btnNewEntry=(Button)findViewById(R.id.btnNew);
btnList=(Button)findViewById(R.id.btnList);
btnList.setOnClickListener(btnListListener);
btnNewEntry.setOnClickListener(btnNewListener);
}


public Activity a()
{
return this;
}

private OnClickListener btnNewListener = new OnClickListener()
{
public void onClick(View v)
{
setContentView(R.layout.newentry);
btnBack=(Button)findViewById(R.id.btnBack);
btnBack.setOnClickListener(btnBack2Listener);
}
};

private OnClickListener btnBack1Listener = new OnClickListener()
{
public void onClick(View v)
{
setContentView(R.layout.main);
}
};

private OnClickListener btnBack2Listener = new OnClickListener()
{
public void onClick(View v)
{
setContentView(R.layout.main);
}
};

private OnClickListener btnListListener = new OnClickListener()
{
public void onClick(View v)
{
setContentView(R.layout.list);
btnBackFromTheList=(Button)findViewById(R.id.btnBa ckFromList);
btnBackFromTheList.setOnClickListener(btnBack1List ener);
ListView ls=(ListView)findViewById(R.id.listView1);
String lv_arr[]=readFromFile();
StringBuffer buf=new StringBuffer();
ls.setAdapter(new ArrayAdapter<String>(a(),android.R.layout.simple_list_item_1 , lv_arr));
}
};

}


sve je inace bilo u jednom listeneru, ali sam to podelio na vise da vidim da nije do toga, ali nije.

dragomix
28.1.2011, 1:17
Ја мислим да би требало, ако мислиш да ти све ради како треба, ОБАВЕЗНО да користиш intent, односно да имаш посебан activity везан за сваки поглед (односно XML фајл). На пример овако:

public void onClick(View v) {
switch (v.getId()) {
case R.id.dugme:
Intent i = new Intent(this, Primer.class);
startActivity(i);
break;
}

Овим би заправо покренуо класу Primer која би искористила посебан поглед намењен конкретно њој кроз setContentView().

irreal
28.1.2011, 11:58
Tako je, ne dolazi u obzir podesavanje root view-a za promenu "forme".

Predlazem ti da kada kreriras novu "formu" dupliras neku od postojecih klasa, a zatim dupliras i postojeci xml fajl, pa ih samo izmenis i obavezno u manifest fajlu (rucno ili kroz Eclipse plugin interfejs) dodas novi activity.

Ako si u OBE klase pravilno implementirao onclicklistener, nema nikakvog razloga da ne radi kako treba. U svakom slucaju uradi ovako pa ako jos imas problema, kaci da pogledamo.

Inace, dobro razmisli da li zelis da druga "forma" kreira novu instancu prve forme ili da se samo vrati na prethodnu.

Posto activity u androidu ide u stack, kada kreiras drugu formu i korisnik zavrsi sa koriscenjem iste, trebao bi samo da pozoves finish(); komandu i drugi activity ce se zavrsiti i automatski te vratiti na prethodni koji je ostao u stacku.

isto ce se desiti i kada korisnik stisne back dugme.


Veoma bi pozeljno bilo da detaljno procitas uvodne clanke na android developer sajtu. Pogotovo Application and components lifecycle.
Android je vrlo specifican sa svojim stanjima, intentima, activityjima i view-ovima.
ali kada se naviknes na Android shvatis da je vrlo dobar sistem.


Ja obozavam kad mi naleti posao da piskaram nesto za Android.

VojaM
28.1.2011, 13:01
Možda Ivanu to nije potrebno, ali ostali Android entuzijasti mogli bi da nađu nešto korisno i ovde (http://www.sk.rs/2010/01/skse03.html).

Ivan452
28.1.2011, 17:54
Hvala na odgovorima, veoma korisno.

Pa tek sam juce poceo onako malo da nabadam, pa rekoh usput kako naidjem na koji probem i novinu pa cu da citam o tome :)

Evo danas sam odradio to ispocetka, sa Activity i Intentima.
Svakako cu procitati to sa life cycle i taj uvodni deo, nasao sam neku literaturu koja deluje OK. A svakako deluje logicnije da kada se zavrsi sa 'formom' da se oslobode resursi.

Takodje ovo bi moglo da se uradi sa nekim ViewFlipperom, medjutim to nisam uspeo da ispravno ubacim u pola projekta.