【问题标题】:Android. TabActivity, switching between tabs without destroying activity from tabHost安卓。 TabActivity,在选项卡之间切换而不破坏来自 tabHost 的活动
【发布时间】:2013-12-17 21:31:16
【问题描述】:

我创建了一个使用 TabActivity 的应用程序。一切都还好,直到某一刻......

每次切换选项卡时,来自 tabHost 的活动都会被销毁并重新创建。我记录了Activity的每一个状态,发现tab被聚焦时调用methosd:onCreatr()、onStart()、onResume(),tab失焦时调用onStop()、onDestroy()

如何在不破坏和重新创建活动的情况下切换选项卡。 ???

对不起我的英语:)

主类

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();
    }
}

【问题讨论】:

  • ListDevice和ListService的启动方式?
  • APIDemo 项目中有一个 TabHost 示例。你可以关注它。

标签: android android-activity tabactivity


【解决方案1】:

您可能需要考虑使用 Fragments 来创建标签,如 here 所述 但是,此处显示的示例在交换时(在 onTabChanged() 中)也会破坏选项卡内容(即片段)。幸运的是,您可以改变这种行为。如果您注意到该示例使用 FragmentTransaction.add() 和 FragmentTransaction.remove() 但您可以将它们更改为 FragmentTransaction.show()FragmentTransaction.hide(). 这样您的 Fragment 活动在切换到视图之外时不会被破坏

【讨论】:

    【解决方案2】:

    在每个标签规范中使用不同的键,

    替换...这个

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

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

    这对我有用..

    【讨论】:

      【解决方案3】:

      您的标签具有相同的标签 - “测试”。只需指定不同的标签,一切都应该没问题。

      【讨论】:

      • 我有同样的问题,但我有不同的标签,所以我不认为这是问题。
      【解决方案4】:

      我认为 onDestroy 上的 moveTaskToBack 应该可以工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多