Android ActivityGroup 应该使用哪个 Intent Flag?

发布于 2024-12-25 10:32:31 字数 2273 浏览 1 评论 0原文

我有一个 TabActivity,第一个选项卡是 ActivityGroup,我为此使用下面的代码;

public class MyTabActivity extends TabActivity
{
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        TabHost tabHost = getTabHost();
        TabHost.TabSpec tabSpec;
        Intent intent;
        Resources resources = getResources();

        intent = new Intent(MyTabActivity.this, MyActivityGroup.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        tabSpec = tabHost.newTabSpec("tab1");
        tabSpec.setIndicator("Tab1", resources.getDrawable(R.drawable.ic_launcher));
        tabSpec.setContent(intent);
        tabHost.addTab(tabSpec);

        intent = new Intent(MyTabActivity.this, SecondTab.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        tabSpec = tabHost.newTabSpec("tab2");
        tabSpec.setIndicator("Tab2", resources.getDrawable(R.drawable.ic_launcher));
        tabSpec.setContent(intent);
        tabHost.addTab(tabSpec);

        tabHost.setCurrentTab(0);
    }
}

在我的 ActivityGroup 中,我想在单击 button 之后进入另一个 Activity,因此我使用下面的代码:

public class MyActivityGroup extends ActivityGroup
{
    private Button button;
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_group);
        button = (Button) findViewById(R.id.button);
        button.setOnClickListener(new OnClickListener()
        {           
            public void onClick(View v)
            {
                // TODO Auto-generated method stub
                Intent intent = new Intent(MyActivityGroup.this, FirstActivity.class);
                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                View view = getLocalActivityManager().startActivity("firstActivity", intent).getDecorView();
                setContentView(view);
            }
        });
    }
}

它可以工作,但有一个问题,当我在 FirstActivity 中单击第一个选项卡时,我无法转到 MyActivityGroup。但例如,单击 SecondTab 后,如果我单击第一个选项卡,我可以转到 MyActivityGroup

为了解决这个问题,我想我应该改变Intent标志,但我无法做到这一点。请帮我。

I have a TabActivity and the first tab is an ActivityGroup and I'm using the code below for this;

public class MyTabActivity extends TabActivity
{
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        TabHost tabHost = getTabHost();
        TabHost.TabSpec tabSpec;
        Intent intent;
        Resources resources = getResources();

        intent = new Intent(MyTabActivity.this, MyActivityGroup.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        tabSpec = tabHost.newTabSpec("tab1");
        tabSpec.setIndicator("Tab1", resources.getDrawable(R.drawable.ic_launcher));
        tabSpec.setContent(intent);
        tabHost.addTab(tabSpec);

        intent = new Intent(MyTabActivity.this, SecondTab.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        tabSpec = tabHost.newTabSpec("tab2");
        tabSpec.setIndicator("Tab2", resources.getDrawable(R.drawable.ic_launcher));
        tabSpec.setContent(intent);
        tabHost.addTab(tabSpec);

        tabHost.setCurrentTab(0);
    }
}

And in my ActivityGroup, I want to go another Activity after button click therefore I'm using the code below:

public class MyActivityGroup extends ActivityGroup
{
    private Button button;
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_group);
        button = (Button) findViewById(R.id.button);
        button.setOnClickListener(new OnClickListener()
        {           
            public void onClick(View v)
            {
                // TODO Auto-generated method stub
                Intent intent = new Intent(MyActivityGroup.this, FirstActivity.class);
                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                View view = getLocalActivityManager().startActivity("firstActivity", intent).getDecorView();
                setContentView(view);
            }
        });
    }
}

It works but there is a problem, when I click the first tab while in the FirstActivity, I can not go to MyActivityGroup. But for example, after clicking SecondTab, if I click first tab, I can go to MyActivityGroup.

To solve this problem, I think I should change the Intent flag, but I couldn't manage it. Please help me.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

迷爱 2025-01-01 10:32:31

你能给我看更多吗?我是这样实现的:

    Intent i = new Intent(getParent(), SomeClass.class);

    View view = SomeActivityGroup.group.getLocalActivityManager()  
    .startActivity("SomeClass", i  
    .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))  
    .getDecorView();  

    // Again, replace the view  
    SomeActivityGroup.group.replaceView(view);

您还想查看活动组本身吗?

好的,这是:

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, RootActivity.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) {
                if (history.size() == 1) {
                    rootView = history.get(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;
    }
}

Can you show me some more? I had it implemented like this:

    Intent i = new Intent(getParent(), SomeClass.class);

    View view = SomeActivityGroup.group.getLocalActivityManager()  
    .startActivity("SomeClass", i  
    .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))  
    .getDecorView();  

    // Again, replace the view  
    SomeActivityGroup.group.replaceView(view);

Do you also want to see the activitygroup itself?

Ok, here it is:

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, RootActivity.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) {
                if (history.size() == 1) {
                    rootView = history.get(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;
    }
}
小清晰的声音 2025-01-01 10:32:31

设置

public class Tabhost extends TabActivity {

    getTabWidget().getChildAt(0).setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            if (tabHost.getCurrentTab() == 0) {
                // tabHost.setCurrentTab(1); // UGLY!!
                // tabHost.setCurrentTab(0); // Had this before, but replaced it with :
                SomeActivityGroup.group.onResume();
            } else {
                tabHost.setCurrentTab(0);
            }
        }
    }

如果它是第一个选项卡,那么应该在......

If it's the first tab, then this should be set in the

public class Tabhost extends TabActivity {

..

    getTabWidget().getChildAt(0).setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            if (tabHost.getCurrentTab() == 0) {
                // tabHost.setCurrentTab(1); // UGLY!!
                // tabHost.setCurrentTab(0); // Had this before, but replaced it with :
                SomeActivityGroup.group.onResume();
            } else {
                tabHost.setCurrentTab(0);
            }
        }
    }

...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文