2012-05-13 1 views
1

TabActivity를 사용하는 응용 프로그램을 만들었습니다. 모든 것이 한 순간에 정상입니다 ...Android. TabActivity, tabHost에서 활동을 파괴하지 않고 탭 사이를 전환

tab이 전환 될 때마다 tabHost의 activityes는 파괴되고 다시 생성됩니다. 나는 모든 활동 상태를 기록하고 탭이 집중 될 때 onCreatr(), onStart(), onResume() 및 whent tab이 초점이 맞지 않는 것을 알아 냈습니다 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는

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

당신이 만드는 대신 조각을 사용하여 고려할 수 있습니다 (tabHost에 사용)하여 설명 된 탭 here 그러나 여기에 표시된 예는 탭 콘텐츠 (예 : 조각)가 스왑 될 때 파기됩니다 (onTabChan ged()). 다행히도이 동작을 변경할 수 있습니다. 이 예에서는 FragmentTransaction.add() 및 FragmentTransaction.remove()를 사용하지만이 값을 FragmentTransaction.show()FragmentTransaction.hide().으로 변경할 수 있습니다.이 방법으로 Fragment 활동이 전환되었을 때 Fragment 활동이 손상되지 않습니다.

0

탭이 동일합니다. 태그 - "테스트". 다른 태그를 지정하면 모든 것이 잘됩니다.

+0

동일한 문제가 있지만 다른 태그가있어서 문제라고 생각하지 않습니다. –

0

onDestroy에서 moveTaskToBack이 작동해야한다고 생각합니다.

1

사용 differenct 키 전면에 각 탭의 사양,

교체 ...이

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

나를 위해이 작품에

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

..