Lanzamiento de actividades dentro de una pestaña en Android

Aquí está el trato. Tengo una aplicación con tres pestañas. A través de varias interacciones con los ítems de las pestañas acabo lanzando otras actividades. El cliente ha revisado esto y desea que las actividades se inicien dentro de las pestañas, por lo que las pestañas permanecen visibles y si el usuario hace clic en la pestaña, regresa a la actividad original definida en la función setContent. ¿Es esto posible y cómo voy a ir sobre esto de otras actividades? (Es decir, las actividades del niño, no la que define el TabHost y tiene acceso a la llamada setContent)?

Es posible iniciar actividades dentro de pestañas . Por lo tanto, establezca el contenido tabspec en un ActivityGroup en lugar de una Activity regular.

tabHost.addTab(tabHost.newTabSpec("Tab") .setIndicator("Tab") .setContent(new Intent(this, YourActivityGROUP.class) .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))); 

Desde dentro de ese grupo de actividades, puede iniciar otra actividad como ésta que sólo actualiza el contenido de la pestaña en la que se encuentra.

 class YourActivityGROUP extends ActivityGroup{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //you van get the local activitymanager to start the new activity View view = getLocalActivityManager() .startActivity("ReferenceName", new Intent(this,YourActivity.class) .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)) .getDecorView(); this.setContentView(view); } } 

Aquí está mi solución

 public class ActivityStack extends ActivityGroup { private Stack<String> stack; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (stack == null) stack = new Stack<String>(); //start default activity push("FirstStackActivity", new Intent(this, FirstStackActivity.class)); } @Override public void finishFromChild(Activity child) { pop(); } @Override public void onBackPressed() { pop(); } public void push(String id, Intent intent) { Window window = getLocalActivityManager().startActivity(id, intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)); if (window != null) { stack.push(id); setContentView(window.getDecorView()); } } public void pop() { if (stack.size() == 1) finish(); LocalActivityManager manager = getLocalActivityManager(); manager.destroyActivity(stack.pop(), true); if (stack.size() > 0) { Intent lastIntent = manager.getActivity(stack.peek()).getIntent(); Window newWindow = manager.startActivity(stack.peek(), lastIntent); setContentView(newWindow.getDecorView()); } } } 

Lengüeta de lanzamiento

 Intent intent = new Intent().setClass(this, ActivityStack.class); TabHost.TabSpec spec = tabHost.newTabSpec("tabId") spec.setContent(intent); 

Llamar a la siguiente actividad

 public class FirstStackActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); TextView textView = new TextView(this); textView.setText("First Stack Activity "); textView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(); intent.setClass(getParent(), SecondStackActivity .class); ActivityStack activityStack = (ActivityStack) getParent(); activityStack.push("SecondStackActivity", intent); } }); setContentView(textView); } } 

Llamar de nuevo

 public class SecondStackActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); TextView textView = new TextView(this); textView.setText("First Stack Activity "); textView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(); intent.setClass(getParent(), ThirdStackActivity .class); ActivityStack activityStack = (ActivityStack) getParent(); activityStack.push("ThirdStackActivity", intent); } }); setContentView(textView); } } 

Funciona en el emulador 2.2

He resuelto con esto: Experiencia – Múltiples actividades de Android en un TabActivity

puedes usar

 intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

Para cada actividad que establezca como contenido para tabSpec, y creará esta actividad cada vez que pulse en la pestaña

Commonsware.com es correcto, no es posible. Yo tenía un problema similar, pero era sólo una actividad que se estaba lanzando. He sacrificado un poco de mi arquitectura y eliminado la actividad que se inició desde dentro de la pestaña. Puse el código en una vista y luego agregé un ViewAnimator a la actividad de la pestaña. Anulé el botón de la parte posteriora y quito esa visión si está para arriba, o bien dejo el botón trasero funcionar como normal.

Esto lo simuló bastante bien, y por sólo una actividad estrechamente relacionada, no voy a perder ningún sueño sobre las consideraciones de diseño.

¿Qué tal 2 tabbar en este problema. Primero 1 es menú inferior tabbar, segundo es tabbar superior, son actividad diferente y xml

¿Como puedo abrir un fragmento o actividad de un spinner en la barra de herramientas?

 import android.content.Intent; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Spinner; > public class MainActivity extends AppCompatActivity { > > @Override > protected void onCreate(Bundle savedInstanceState) { > super.onCreate(savedInstanceState); > setContentView(R.layout.activity_main); > > //Appbar > Toolbar toolbar = (Toolbar) findViewById(R.id.appbar); > setSupportActionBar(toolbar); > getSupportActionBar().setDisplayShowTitleEnabled(false); > > //Appbar page filter > Spinner cmbToolbar = (Spinner) findViewById(R.id.CmbToolbar); > > ArrayAdapter<String> adapter = new ArrayAdapter<>( > getSupportActionBar().getThemedContext(), > R.layout.appbar_filter_title, > new String[]{"Opción 1 ", "Opción 2 ", "Opción 3 "}); > > adapter.setDropDownViewResource(R.layout.appbar_filter_list); > > cmbToolbar.setAdapter(adapter); > > cmbToolbar.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { > @Override > public void onItemSelected(AdapterView<?> adapterView, View view, int position, long l) { > //... Acciones al seleccionar una opción de la lista > Log.i("Toolbar 3", "Seleccionada opción " + position); > > Fragment f = null; > > switch(position) { > case 0: > f = Fragment2.newInstance(); > break; > > case 1: > f = Fragment1.newInstance(); > break; > > } > } > > @Override > public void onNothingSelected(AdapterView<?> adapterView) { > //... Acciones al no existir ningún elemento seleccionado > } > }); > } > > @Override > public boolean onCreateOptionsMenu(Menu menu) { > // Inflate the menu; this adds items to the action bar if it is present. > getMenuInflater().inflate(R.menu.menu_main, menu); > return true; > } > > @Override > public boolean onOptionsItemSelected(MenuItem item) { > // Handle action bar item clicks here. The action bar will > // automatically handle clicks on the Home/Up button, so long > // as you specify a parent activity in AndroidManifest.xml. > int position = item.getItemId(); > > Fragment f = null; > > switch(position) { > case 0: > f = Fragment2.newInstance(); > break; > > case 1: > f = Fragment1.newInstance(); > break; > > case 2: > Intent intent = new Intent(getApplicationContext(), Fragment1.class); > startActivity(intent); > break; > > } > return super.onOptionsItemSelected(item); > } > > > public Fragment getItem(int position) { > > Fragment f = null; > > switch(position) { > case 0: > f = Fragment2.newInstance(); > break; > > case 1: > f = Fragment1.newInstance(); > break; > > case 2: > Intent intent = new Intent(getApplicationContext(), Fragment1.class); > startActivity(intent); > break; > > } > > return f; > } } 
  • Cadena de confianza de Android SSL con certificados intermedios (Apache HttpClient 4.X)
  • Cifrado entre Android y C #
  • Cómo almacenar un objeto en una base de datos SQLite en Android?
  • ¿Cómo calcular el usuario activo en Mobile App Analytics?
  • ¿Cómo desactivar y activar el desplazamiento en Android ScrollView?
  • Recuperar una lista de países del sistema operativo Android
  • ¿Crear una transición Fragment como la aplicación Contactos?
  • Clueless Acerca de (posible) pérdida de memoria de Android
  • ¿Cómo puedo almacenar una estructura de datos como un Hashmap internamente en Android?
  • ¿Cómo configurar el proyecto Cordova plugin con soporte IDE?
  • El reconocimiento de voz se agota demasiado pronto en android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.