2012-05-13 6 views
1

TabActivityを使用するアプリケーションを作成しました。すべてが一瞬までOKです...Android。 TabActivity、tabHostからの活動を破壊することなくタブを切り替える

タブが切り替わるたびに、tabHostからのアクティビティは破棄され、再び再作成されます。私はすべてのアクティビティの状態を記録し、タブがフォーカスされているときには、onCastr()、onStart()、onResume()、およびwhentタブのフォーカスがずれていることをonStop()、onDestroy()、

アクティビティを破棄して再作成することなくタブを切り替えるにはどうすればよいですか。 ??? (tabHostで使用)

私の英語のため申し訳ありません:)

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

あなたを作成する代わりに、フラグメントを使用して検討する必要があります記載されているタブhere しかし、そこに示されている例では、スワップ時にタブの内容(つまりフラグメント)も破棄されます(onTabChan ged())。幸いにも、この動作を変更することができます。この例では、FragmentTransaction.add()とFragmentTransaction.remove()を使用していますが、これらをFragmentTransaction.show()FragmentTransaction.hide().に変更できます。このように、ビューの切り替え時にフラグメントアクティビティが破棄されません。

0

タブが同じですタグ - "テスト"。別のタグを指定するだけでOKです。

+0

私は同じ問題を抱えていますが、私は別のタグを持っているので、これは問題ではないと思います。 –

0

私はmoveDaskToBack onDestroyがうまくいくと思います。

1

使用differenctキーフォア各タブのスペック、

置き換える...この

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

私にとって、この作品で

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

..

関連する問題