Android 单击“重置”选项卡

Android 单击“重置”选项卡,android,android-intent,android-tabhost,Android,Android Intent,Android Tabhost,我有一个由三个选项卡实现的tabhost,并且正在运行。我想知道的是,如果选择了单击同一选项卡时,是否有返回的方法,它将返回到初始状态(如重置) 我使用每个选项卡的方法“setOnClickListener”成功地做到了这一点,并开始获取一个新的活动,但这并不重要,因为我注意到了活动的经过 谢谢我有一个简单的方法和一个更复杂的方法 // Re-clickable (active) tabs getTabWidget().getChildAt(0).setOnClickListen

我有一个由三个选项卡实现的tabhost,并且正在运行。我想知道的是,如果选择了单击同一选项卡时,是否有返回的方法,它将返回到初始状态(如重置)

我使用每个选项卡的方法“setOnClickListener”成功地做到了这一点,并开始获取一个新的活动,但这并不重要,因为我注意到了活动的经过


谢谢

我有一个简单的方法和一个更复杂的方法

    // Re-clickable (active) tabs
    getTabWidget().getChildAt(0).setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            if (tabHost.getCurrentTab() == 0) {
                // Try this :
                tabHost.setCurrentTab(1); // Ugly easy way
                tabHost.setCurrentTab(0);

                // Or do this :
                SomeActivityGroup.group.onResume(); // More complex way
            } else {
                tabHost.setCurrentTab(0);
            }
         }
     }
我现在时间不多了,如果你愿意的话,我也可以稍后发布活动组代码

**这就是:

import java.util.ArrayList;

import android.app.ActivityGroup;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;

public class SomeActivityGroup extends ActivityGroup {

    View rootView;

    // Keep this in a static variable to make it accessible for all the nested
    // activities, lets them manipulate the view
    public static SomeActivityGroup group;

    // Need to keep track of the history if you want the back-button to work
    // properly, don't use this if your activities requires a lot of memory.
    private ArrayList<View> history;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    protected void onResume() {

        super.onResume();
        this.history = new ArrayList<View>();
        group = this;

        // Start the root activity within the group and get its view
        View view = getLocalActivityManager().startActivity("SomeActivity", new Intent(this, SomeActivity.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)).getDecorView();

        // Replace the view of this ActivityGroup
        replaceView(view);
    }

    public void replaceView(View v) {
        // Adds the old one to history
        if (history.size() == 0) {
            if (rootView != null) {
                history.add(rootView);
                rootView = null;
            }
        }
        history.add(v);
        // Changes this Groups View to the new View.
        setContentView(v);
    }

    public void back() {
        try {
            if (history.size() > 0) {
                history.remove(history.size() - 1);
                setContentView(history.get(history.size() - 1));
            } else {
                finish();
            }
        } catch (Exception ex) {
        }
    }

    @Override
    public void onBackPressed() {
        try {
            SomeActivityGroup.group.back();
        } catch (Exception ex) {

        }
        return;
    }

}
import java.util.ArrayList;
导入android.app.ActivityGroup;
导入android.content.Intent;
导入android.os.Bundle;
导入android.view.view;
公共类SomeActivityGroup扩展了ActivityGroup{
视图根视图;
//将其保存在静态变量中,以使所有嵌套的
//活动,让它们操纵视图
公共静态活动组;
//如果希望“后退”按钮正常工作,则需要跟踪历史记录
//正确地说,如果你的活动需要大量内存,就不要使用它。
私家侦探史;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
}
@凌驾
受保护的void onResume(){
super.onResume();
this.history=new ArrayList();
组=此;
//在组内启动根活动并获取其视图
视图视图=getLocalActivityManager().startActivity(“SomeActivity”,新意图(this,SomeActivity.class).addFlags(Intent.FLAG\u ACTIVITY\u CLEAR\u TOP)).getDecorView();
//替换此ActivityGroup的视图
替换视图(视图);
}
公共视图(视图v){
//将旧的添加到历史记录中
if(history.size()==0){
if(rootView!=null){
添加(rootView);
rootView=null;
}
}
历史。添加(v);
//将此组视图更改为新视图。
setContentView(v);
}
公众退票(){
试一试{
if(history.size()>0){
history.remove(history.size()-1);
setContentView(history.get(history.size()-1));
}否则{
完成();
}
}捕获(例外情况除外){
}
}
@凌驾
public void onBackPressed(){
试一试{
SomeActivityGroup.group.back();
}捕获(例外情况除外){
}
返回;
}
}

请记住,ICS中不推荐使用ActivityGroup。

如果您开发一个新的应用程序,我强烈建议您使用片段和一些兼容库,因为现在不推荐使用TabHost和TabActivities的“旧”方法

下载库并查看课程:

ABSLibraryXX\samples\demos\src\com\actionbarsherlock\sample\demos\app\FragmentTabs.java


我保证你会惊讶于它的强大和简单。当您在片段而不是活动之间切换时,片段状态将保持不变—它们的行为类似于视图而不是活动

目前尚不清楚您的问题是什么,以及您对我们的期望是什么。请发布代码并简要说明问题所在。我单击选项卡,其内容将在不创建新活动的情况下重新启动确定,我已为ActivityGroup添加了代码。如果您想为ICS开发,我建议使用片段和操作栏选项卡。