java - pulsarlo - android: cómo cambiar el diseño en el botón clic?
manual de programacion android pdf (8)
Creo que lo que estás tratando de hacer debe hacerse con múltiples actividades. Si estás aprendiendo Android, comprender Actividades es algo que tendrás que abordar. Tratar de escribir una aplicación completa con una sola actividad terminará siendo mucho más difícil. Lea este artículo para comenzar, luego debería terminar con algo más como esto:
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);
Tengo que seguir el código para seleccionar el diseño al hacer clic en el botón.
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);
Cuando hago clic en el botón "AppView", el diseño cambia, pero cuando hago clic en el botón "DownloadView", no pasa nada.
Este enlace dice que tengo que comenzar una nueva actividad.
Pero no sé cómo usar el código de intención de comenzar una nueva actividad, ¿se agregará un nuevo archivo?
EDITAR: Tengo mi código en la nueva actividad:
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
}
}
pero no funciona, se cierra la fuerza, el logcat dice:
El logcat muestra el error, debe llamar a super.onCreate(savedInstanceState)
:
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
//... your code
}
Es muy simple, solo haz esto:
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
}
});
Primero sugeriría poner un Log en cada caso de su interruptor para asegurarse de que se está llamando su código.
Luego verificaría que los diseños sean realmente diferentes.
Quería cambiar el diseño en tiempo de ejecución al hacer clic en el botón. Pero eso no es posible y, como se ha indicado correctamente más arriba, debe reiniciar la actividad. Se encontrará con un problema similar cuando planee cambiar el tema en función de la selección del usuario, pero no se reflejará en el tiempo de ejecución. Tendrá que reiniciar la actividad.
Sé que llegaré tan tarde, pero qué diablos.
Tengo casi el mismo código exacto que Kris, usando solo una Actividad pero con 2 diseños / vistas diferentes, y quiero cambiar entre los diseños a voluntad.
Como prueba, agregué 2 opciones de menú, cada una cambia la vista:
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);
}
}
Nota, tengo una clase de Actividad. Esto funciona perfectamente Así que no tengo idea de por qué las personas sugieren utilizar diferentes actividades / Intents. Quizás alguien pueda explicar por qué mi código funciona y el de Kris no.
android:onClick
un android:onClick
al diseño y luego cambiaría el diseño en la actividad.
Entonces en el diseño
<ImageView
(Other things like source etc.)
android:onClick="changelayout"
/>
Luego, en la actividad, agregue lo siguiente:
public void changelayout(View view){
setContentView(R.layout.second_layout);
}
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 ");
}
}
};
Nota: y luego debe declarar todas sus actividades en el archivo de manifiesto .xml como este:
<activity android:name=".SecondActivity" ></activity>
<activity android:name=".ThirdActivity" ></activity>
EDITAR: actualiza esta parte del Código :):
@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");
}
Nota: compruebe esto (enlace roto) Tutorial sobre cómo cambiar entre actividades .