it-swarm.com.de

android: wie kann ich das layout beim klicken der taste ändern?

Ich muss den Code zum Auswählen des Layouts beim Klicken auf die Schaltfläche befolgen.

View.OnClickListener handler = new View.OnClickListener(){
    public void onClick(View v) {

        switch (v.getId()) {

            case R.id.DownloadView: 
                // doStuff
                setContentView(R.layout.main);
                break;
            case R.id.AppView: 
                // doStuff
                setContentView(R.layout.app);
                break;
        }
    }
};

findViewById(R.id.DownloadView).setOnClickListener(handler);
findViewById(R.id.AppView).setOnClickListener(handler);

Wenn ich auf die Schaltfläche "AppView" klicke, ändert sich das Layout, aber wenn ich auf die Schaltfläche "DownloadView" klicke, geschieht nichts.

Dieser Link sagt, dass ich eine neue Aktivität beginnen muss.

Aber ich weiß nicht, wie man den Code dort benutzt, um neue Aktivitäten zu starten. Wird eine neue Datei hinzugefügt?

EDIT: Ich habe meinen Code für die neue Aktivität:

package com.example.engagiasync;

import Android.app.Activity;
import Android.content.Intent;
import Android.os.Bundle;
import Android.view.View;
import Android.view.View.OnClickListener;
import Android.widget.TextView;

public class AppView extends Activity implements OnClickListener{


    @Override
    public void onCreate(Bundle savedInstanceState){

        setContentView(R.layout.app);

        TextView tv = (TextView) this.findViewById(R.id.thetext);
        tv.setText("App View yo!?\n");
    }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub

    }
}

aber es funktioniert nicht, erzwingt schließt, der Logcat sagt:enter image description here

22
Kris
  Button btnDownload = (Button) findViewById(R.id.DownloadView);
  Button btnApp = (Button) findViewById(R.id.AppView);

  btnDownload.setOnClickListener(handler);
  btnApp.setOnClickListener(handler);

  View.OnClickListener handler = new View.OnClickListener(){

  public void onClick(View v) {

    if(v==btnDownload){ 
            // doStuff
            Intent intentMain = new Intent(CurrentActivity.this , 
                                           SecondActivity.class);
            CurrentActivity.this.startActivity(intentMain);
            Log.i("Content "," Main layout ");
    }

    if(v==btnApp){ 
            // doStuff
            Intent intentApp = new Intent(CurrentActivity.this, 
                                          ThirdActivity.class);

            CurrentActivity.this.startActivity(intentApp);

            Log.i("Content "," App layout ");

    }
   }
  };

Hinweis: Dann sollten Sie alle Ihre Aktivitäten in der Manifest-XML-Datei folgendermaßen deklarieren: 

<activity Android:name=".SecondActivity" ></activity>
<activity Android:name=".ThirdActivity" ></activity>

BEARBEITEN: Aktualisieren Sie diesen Teil von Code :): 

@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);// Add THIS LINE

    setContentView(R.layout.app);

    TextView tv = (TextView) this.findViewById(R.id.thetext);
    tv.setText("App View yo!?\n");
}

NB: Check this (Defekter Link) Anleitung zum Wechseln zwischen Aktivitäten .

19
Houcine

Ich würde dem Layout einen Android:onClick hinzufügen und dann das Layout in der Aktivität ändern.

Also im Layout 

<ImageView
(Other things like source etc.)
Android:onClick="changelayout"
/>

Fügen Sie dann in der Aktivität Folgendes hinzu:

public void changelayout(View view){
    setContentView(R.layout.second_layout);
}
8
cw1998

Sie wollten das Layout zur Laufzeit per Knopfdruck ändern. Dies ist jedoch nicht möglich, und wie oben richtig angegeben, müssen Sie die Aktivität erneut starten. Sie werden auf ein ähnliches Problem stoßen, wenn Sie beabsichtigen, das Design basierend auf der Auswahl des Benutzers zu ändern, dies wird jedoch nicht zur Laufzeit angezeigt. Sie müssen die Aktivität erneut starten.

2

Ich weiß, ich komme zu spät, aber was solls.

Ich habe fast den gleichen Code wie Kris, benutze nur eine Aktivität, aber zwei verschiedene Layouts/Ansichten.

Als Test habe ich zwei Menüoptionen hinzugefügt, jede wechselt die Ansicht:

public boolean onOptionsItemSelected(MenuItem item) {

        switch (item.getItemId()) {
            case R.id.item1:
                setContentView(R.layout.main);
                return true;
            case R.id.item2:
                setContentView(R.layout.alternate);
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }

Beachten Sie, ich habe eine Aktivitätsklasse. Das funktioniert perfekt. Ich habe keine Ahnung, warum die Leute verschiedene Aktivitäten/Absichten vorschlagen. Vielleicht kann jemand erklären, warum mein Code funktioniert und Kris nicht.

2
Kevin

Ich denke, das, was Sie versuchen, sollte mit mehreren Aktivitäten durchgeführt werden. Wenn Sie Android lernen, ist das Verstehen von Aktivitäten etwas, das Sie in Angriff nehmen müssen. Der Versuch, eine ganze App mit nur einer Aktivität zu schreiben, wird am Ende schwieriger. Lesen Sie diesen Artikel , um sich selbst einzuführen, dann sollten Sie mit etwas mehr enden:

View.OnClickListener handler = new View.OnClickListener(){
    public void onClick(View v) {

        switch (v.getId()) {

            case R.id.DownloadView: 
                // doStuff
                startActivity(new Intent(ThisActivity.this, DownloadActivity.class));
                break;
            case R.id.AppView: 
                // doStuff
                startActivity(new Intent(ThisActivity.this, AppActivity.class));
                break;
        }
    }
};

findViewById(R.id.DownloadView).setOnClickListener(handler);
findViewById(R.id.AppView).setOnClickListener(handler);
2
Gary Buyn

Das Protokoll zeigt den Fehler an, Sie sollten super.onCreate(savedInstanceState) aufrufen:

@Override
public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    //... your code
}
1
candelapps

Es ist sehr einfach, tun Sie dies einfach:

t4.setOnClickListener(new OnClickListener(){

        @Override
        public void onClick(View v) {

            launchQuiz2();          // TODO Auto-generated method stub

        }

        private void launchQuiz2() {
            Intent i = new Intent(MainActivity.this, Quiz2.class);
            startActivity(i);
            // TODO Auto-generated method stub

        }

    });
0
arun bhati

Zuerst würde ich vorschlagen, in jedem Fall ein Protokoll Ihres Switches zu erstellen, um sicherzustellen, dass Ihr Code aufgerufen wird.

Dann würde ich überprüfen, ob die Layouts tatsächlich unterschiedlich sind.

0
Jason Rogers