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:
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 .
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);
}
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.
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.
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);
Das Protokoll zeigt den Fehler an, Sie sollten super.onCreate(savedInstanceState)
aufrufen:
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
//... your code
}
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
}
});
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.