单击重置选项卡

时间:2012-01-17 14:30:18

标签: android android-intent android-tabhost

我有一个使用三个标签实现的tabhost并且正在运行。我想知道如果有任何方法返回何时单击相同的选项卡,它会返回到其初始状态(如重置)?

我设法使用每个标签的方法“setOnClickListener”来开始获取新活动,但这并不重要,因为我注意到活动的通过。

由于

2 个答案:

答案 0 :(得分:1)

我有一种丑陋的简单方法和一种更复杂的方式。

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

我现在几乎没有时间,如果你愿意我也可以稍后发布ActivityGroup代码。

**这是:

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

}

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

答案 1 :(得分:1)

如果您开发了一个新的应用程序,那么我强烈建议您使用Fragments和一些兼容性库,最好是ActionBarSherlock,因为现在不推荐使用TabHost和TabActivities的“旧”方法。

下载图书馆并查看课程:

ABSLibraryXX \样品\演示\ SRC \ COM \ actionbarsherlock \样品\演示\应用\ FragmentTabs.java

我保证你会感到惊讶它是多么强大和简单。当您在Fragments而不是Activities之间切换时,Fragments状态仍然存在 - 它们的行为类似于视图而不是活动。