layout wechseln

  • Antworten:7
  • Bentwortet
Kullorki
  • Forum-Beiträge: 55

06.11.2010, 11:04:14 via Website

Hi ich habe jetzt schon einige tage rumprobiert, aber irgendwie will es nicht so wie ich will...
Wenn ich nach" layout in der android app wechseln" gesucht dann finde ich nur wie man das layout von Tastaturen oder Uhren ändert...
meine buttons funktionieren anscheinend, weil die beim klicken kurz gelb aufleuchten.
Wie mache ich das jetzt das ein anderes layout angezeigt wird?, weil so wie es jetzt ist passiert gar nichts wenn ich auf einen button drücke...
1@Override
2 protected void onCreate(Bundle savedInstanceState)
3 {
4 super.onCreate(savedInstanceState);
5
6 Button btnSettings = (Button) findViewById(R.id.settings);
7 btnSettings.setOnTouchListener(onTouchButton);
8
9 Button btnInfo = (Button) findViewById(R.id.info);
10 btnInfo.setOnTouchListener(onTouchButton);
11....//andere buttons
12}

1OnTouchListener onTouchButton = new OnTouchListener() {
2
3
4 public boolean onTouch(View v, MotionEvent event){
5 switch(v.getId()){
6 case R.id.settings: {setContentView(R.layout.settings);} break;
7 case R.id.info: setContentView(R.layout.info); break;
8..../andere buttons
9}
10 return false;
11 }
12 };

was mache ich falsch, oder wie ändert man sonst das layout? ich hab nichts gefunden durch google.

Antworten
Tobias Eckert
  • Forum-Beiträge: 155

07.11.2010, 21:17:29 via Website

Die id die Dir getID zurückgibt ist eine ID die Du dem Button erst mit setID zuweisen musst. Du kannst das auch ohne ID lösen indem Du in Deiner onTouch Routine abfragst:

if (v.equals(btnSettings)) ...
else if (v.equals(btnInfo)) ...

Ansonsten hilft es bei so Fällen auch ein paar Log Statements einzubauen (Log.i("Program", "Text..."). Damit kannst Du recht einfach sehen ob Android wie gewünscht in Deine Abfragen springt, d.h. ob es an Deiner if Abfrge liegt, oder ob das setContentView nicht wie gewünscht funktioniert.

Kann auch sein dass Du noch ein invalidate() absetzen musst.

Antworten
Kullorki
  • Forum-Beiträge: 55

09.11.2010, 20:43:40 via Website

Danke das hat funktioniert ... invalidate() brauchte ich jetzt so nicht benutzen, zumindest funktioniert es auch ohne ... ^^

Antworten
Kullorki
  • Forum-Beiträge: 55

17.11.2010, 20:44:53 via Website

sorry fürs doppelt posten,
Ich hab mal ein wenig weiter rumprobiert... das layout wechseln funktioniert... aber die ich hab noch eine frage bezüglich den Buttons selber.
Wenn ich Buttons von einem anderem layout als das main layout (main.xml) deklariere
bekomm ich eine Null pointer exception, muss man pro layout eine Klasse mit eigenem listener für die buttons machen?


mfg Kullorki

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

18.11.2010, 02:07:31 via Website

Muss man nicht, sollte man aber, denn das hält den Code übersichtlich & lesbar ;)

— geändert am 18.11.2010, 02:07:40

Antworten
Kullorki
  • Forum-Beiträge: 55

18.11.2010, 20:41:31 via Website

Ich bin anscheinend zu doof für sowas :huh: ?
bekomme immer eine NullPointerException
also
Klasse Main:
1...
2 public boolean onTouch(View v, MotionEvent event){
3 int l = v.getId();
4 switch(l){
5 case (1):
6 {
7 Intent lIntent = new Intent(null, Settings.class); //<- crasht hier laut Dalvik Debug Monitor
8 startActivity(lIntent);
9 finish();
10 }
11...

... wenn ich mit das mit startActivityForResult mache bekomm ich das Syntaktisch nicht hin
1case (1):
2 {
3 Intent lIntent = new Intent(view.getContext(), Settings.class); // view can not be resolved
4 startActivityForResult(lIntent, 0); // wenn ich View schreibe, dann "Cannot make a static reference to the non-static method
5 //getContext() from the type View"
6 finish();
7 }
was mache ich falsch ? bitte helft mir :/

— geändert am 18.11.2010, 20:42:37

Antworten
Markus Gu
  • Forum-Beiträge: 2.644

18.11.2010, 22:29:58 via App

du uebergibst null und wunderst dich ueber eine nullpointerexception :-)

swordiApps Blog - Website

Antworten
Kullorki
  • Forum-Beiträge: 55

19.11.2010, 19:53:51 via Website

oh man ich bin sooooooooooooooo Blind .. sorry das st ja schon peinlich ich hätte einfach v.getContext() schreiben müssen statt View.getContext :*)

Antworten