2012-05-13 1 views
1

Я создал приложение, которое использует TabActivity. Все в порядке до одного момента ...Android. TabActivity, переключение между вкладками без разрушения активности из tabHost

Каждый раз, когда вкладка переключается, действия из tabHost уничтожаются и снова воссоздаются. Я зарегистрировал каждое состояние деятельности и выяснил, что когда вкладка сфокусирована, называются методами: onCreatr(), onStart(), onResume(), а вкладка whent вне фокуса называется onStop(), onDestroy()

Как я могу переключать вкладки без разрушения и воссоздания активности. ???

Извините за мой английский :)

Main.Class

package my.pack; 

import android.app.TabActivity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.widget.TabHost; 

public class Main extends TabActivity { 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     TabHost tabHost = getTabHost(); 
     TabHost.TabSpec spect; 
     Intent intent; 

     intent = new Intent().setClass(this, ListDevice.class); 
     spect = tabHost.newTabSpec("test").setIndicator("Device").setContent(intent); 
     tabHost.addTab(spect); 

     intent = new Intent().setClass(this, ListServer.class); 
     spect = tabHost.newTabSpec("test").setIndicator("Server").setContent(intent); 
     tabHost.addTab(spect); 

     tabHost.setCurrentTab(0); 
    } 
} 

ListServer.class (используется в tabHost)

package my.pack; 

import java.io.File; 
import java.util.ArrayList; 
import android.app.ListActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.ListView; 

public class ListServer extends ListActivity { 

    private File file = new File("."); 
    private ArrayList<File> values = new ArrayList<File>(); 
    private CopyOfMyPerformanceArrayAdapter adapter; 

    public void onCreate(Bundle icicle) { 
     Log.d("test","server"); 
     super.onCreate(icicle); 
     for (File f: file.listFiles()) { 
      if (f.isDirectory()) values.add(f); 
     } 
     for (File f: file.listFiles()) { 
      if (f.isFile()) values.add(f); 
     } 

     View footer = getLayoutInflater().inflate(R.layout.footer, null); 
     getListView().addFooterView(footer); 

     adapter = new CopyOfMyPerformanceArrayAdapter(this,values); 
     setListAdapter(adapter); 
    } 

    @Override 
    protected void onListItemClick(ListView l, View v, int position, long id) { 
     try{ 
     File file = (File) getListAdapter().getItem(position); 

     if (file.isDirectory()) { 
      adapter.clear(); 
      for (File f: file.listFiles()) { 
       values.add(f); 
      } 
     adapter.notifyDataSetChanged(); 
     }} catch(Exception e) { Log.d("opa", "server");} 

    } 


    public void onRestart(){ 
     Log.d("ftp","onRestart"); 
     super.onRestart(); 
    } 
    public void onStart(){ 
     Log.d("ftp","onStart"); 
     super.onStart(); 
    } 
    public void onResume(){ 
     Log.d("ftp","onResume"); 
     super.onResume(); 
    } 
    public void onPouse(){ 
     Log.d("ftp","onpouse"); 
     super.onPause(); 
    } 
    public void onStop(){ 
     Log.d("ftp","onStop"); 
     super.onStop(); 
    } 
    public void onDestroy(){ 
     Log.d("ftp","onDestroy"); 
     super.onDestroy(); 
    } 
} 
+0

Запуск режима ListDevice и ListService? –

+0

В проекте APIDemo есть пример TabHost. вы можете следить за ним. –

ответ

1

Вы могли бы рассмотреть возможность использования фрагментов вместо того, чтобы создать свой Вкладки, как описано here Однако пример, показанный там, также разрушает содержимое вкладки (то есть фрагмент) при ее замене (в onTabChan ВГО()). К счастью, вы можете изменить это поведение. Если вы заметили в данном примере используется FragmentTransaction.add() и FragmentTransaction.remove(), но вы можете изменить их на FragmentTransaction.show() и FragmentTransaction.hide(). Таким образом, ваш фрагмент активности не разрушается при переключении из-обзора

0

Вкладки имеют одинаковые tag - «test». Просто укажите разные теги, и все должно быть в порядке.

+0

У меня такая же проблема, но у меня разные теги, поэтому я не думаю, что это проблема. –

0

Я думаю, что moveTaskToBack on onDestroy должен работать.

1

использование differenct ключ передняя каждая вкладка спецификации,

заменить ... это

spect = tabHost.newTabSpec("test") 
spect = tabHost.newTabSpec("test") 

с

spect = tabHost.newTabSpec("test1") 
spect = tabHost.newTabSpec("test2") 

эта работа для меня ..