Android Eclipse, два действия на двух разных вкладках, продолжает вызывать onCreate ()! - PullRequest
1 голос
/ 27 июля 2011

У меня есть 2 действия, скажем, Activity1 и Activity2.Я добавил эти 2 в 2 отдельные вкладки под TabHost.

Каждый раз, когда я нажимаю нужную вкладку для просмотра содержимого, вызывается onCreate () для каждого действия и, следовательно, перезапускает действие!Это почему?Как я могу предотвратить это ??

Спасибо.

Код из класса TabHostActivity:

package zt.ztactive;

import android.app.TabActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TabHost;
import android.widget.TabHost.TabSpec;

 public class TabHostActivity extends TabActivity { 

     TabHost tabHost;

     /** Called when the activity is first created. */

     @Override 
     public void onCreate(Bundle savedInstanceState) {  
         super.onCreate(savedInstanceState);  
         setContentView(R.layout.tabwindow);  

         /** TabHost will have Tabs */ 
         tabHost = (TabHost)findViewById(android.R.id.tabhost); 

         /** TabSpec used to create a new tab.  
          * By using TabSpec only we can able to setContent to the tab.  
          * By using TabSpec setIndicator() we can set name to tab. */

         /** tid1 is firstTabSpec Id. Its used to access outside. */ 
         TabSpec firstTabSpec = tabHost.newTabSpec("tid1");  
         TabSpec secondTabSpec = tabHost.newTabSpec("tid1"); 

         /** TabSpec setIndicator() is used to set name for the tab. */ 
         /** TabSpec setContent() is used to set content for a particular tab. */ 
         firstTabSpec.setIndicator("First Tab Name").setContent(new Intent(this,Activity1.class));  
         secondTabSpec.setIndicator("Second Tab Name").setContent(new Intent(this,Activity2.class)); 

         /** Add tabSpec to the TabHost to display. */ 
         tabHost.addTab(firstTabSpec);  
         tabHost.addTab(secondTabSpec);  
     }

 }

Ответы [ 4 ]

4 голосов
/ 27 июля 2011

Можете ли вы показать некоторый код относительно того, как вы используете действия на вашем хосте. В идеале после создания вкладки действия будут вызывать onResume, а не onCreate, поскольку действия не уничтожаются при переходе с одной вкладки на другую.

1 голос
/ 17 декабря 2013

заменить это TabSpec firstTabSpec = tabHost.newTabSpec ("tid1");
TabSpec secondTabSpec = tabHost.newTabSpec ("tid1"); с:

TabSpec firstTabSpec = tabHost.newTabSpec ("tid1");
TabSpec secondTabSpec = tabHost.newTabSpec ("tid2");

1 голос
/ 27 июля 2011

Для сохранения памяти загружается как можно меньше действий в одной точке. Поскольку действие не отображается, когда вкладка не отображается, действие уничтожается.

Либо вы не должны создавать действие для каждой вкладки, но вместо этого иметь разные представления для каждой вкладки в одном и том же действии, или вы должны сохранить состояние действия для повторной загрузки.

Вот небольшой пример того, как сделать tabhost без действий: http://dewful.com/?p=15

0 голосов
/ 11 января 2012

Проблема для меня была та же, что описана выше PravinCG.Убедившись, что теги во всех TabSpecs уникальны, проблема легко решается!

...