1

TabActivity を使用するアプリケーションを作成しました。一瞬まで大丈夫…

タブが切り替わるたびに、tabHost からのアクティビティが破棄され、再度作成されます。アクティビティのすべての状態をログに記録したところ、タブがフォーカスされているときは method: onCreatr()、onStart()、onResume() と呼ばれ、タブがフォーカスされていないときは 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();
    }
}
4

4 に答える 4

1

ここで説明されているように、代わりに Fragments を使用してタブを作成することを検討することもできます が、そこに示されている例では、(onTabChanged() で) スワップされると、タブのコンテンツ (つまり Fragment) も破棄されます。幸いなことに、この動作を変更できます。この例では FragmentTransaction.add() と FragmentTransaction.remove() を使用していますが、これらをFragmentTransaction.show()FragmentTransaction.hide() に変更できます。このようにして、Fragment アクティビティがビュー外に切り替えられたときに破棄されません

于 2012-05-13T10:47:54.050 に答える
0

タブには同じタグ「test」が付いています。異なるタグを指定するだけで、すべて問題ありません。

于 2012-06-14T15:13:03.783 に答える