Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android-关闭第一个活动_Java_Android_Android Activity - Fatal编程技术网

Java Android-关闭第一个活动

Java Android-关闭第一个活动,java,android,android-activity,Java,Android,Android Activity,我创建了一个android应用程序,它有两个活动,一个是MainActivity,另一个是Articleactivity 在此应用程序中,您可以打开无限数量的活动。所以它就像一个文章应用程序,在一篇文章里面还有其他文章,所以你可以无限量地关注文章。每篇文章都会打开一个新的文章活动 现在我想做的是:当第10篇文章打开时,我想关闭第一篇文章活动(而不是main活动) 我也读过这篇文章,但它只在您有不同的活动(即ActivityA、ActivityB、ActivityC…)时有效 有什么方法可以做到这

我创建了一个android应用程序,它有两个活动,一个是
MainActivity
,另一个是
Article
activity

在此应用程序中,您可以打开无限数量的活动。所以它就像一个文章应用程序,在一篇文章里面还有其他文章,所以你可以无限量地关注文章。每篇文章都会打开一个新的
文章
活动

现在我想做的是:当第10篇
文章
打开时,我想关闭第一篇
文章
活动(而不是
main活动

我也读过这篇文章,但它只在您有不同的活动(即ActivityA、ActivityB、ActivityC…)时有效


有什么方法可以做到这一点吗?

在打开第10篇文章时,请执行以下操作:

Intent intent = new Intent(this,Your_Article.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

或者,如果您只想关闭某个特定的活动,请获取该活动的实例,并使用finish()关闭它。

这是一种黑客攻击,只是为了让它工作,但您可能想尝试从描述中删除片段

  • 创建一个名为ActivityHandler.java的新类

    public class ActivityHandler { 
    private static ActivityHandler uniqueInstance;
    private static List<Activity> mListActivity;
    private static int SIZE_LIMIT = 10;
    
    public static ActivityHandler getInstance() {
        if (uniqueInstance == null) {
            synchronized (ActivityHandler.class) {
                if (uniqueInstance == null) {
                    uniqueInstance = new ActivityHandler();
                }
            }
        }
        return uniqueInstance;
    }
    
    
    
    private Activityhandler() {
        if (mListActivity == null ) {
            mListActivity = new ArrayList();
        }
    }
    
    
    public static void add (Activity activity){
        mListActivity.add(activity);        
        if (mListActivity.size() > 10){
            Activity firstActivity = mListActivity.remove(0);
            firstActivity.finish();         
        }
    }   
    }
    

    如果您在片段上构建应用程序,那么在将片段添加到后堆栈并删除旧标记时,只需使用计数器即可。考虑一下:我看到我可以在
    片段
    中完成它,但实际上我没有使用它们,我现在使用的是
    活动
    。我知道,我建议您使用片段,因为它更适合您尝试做的事情。对最终用户来说,这不会有什么不同,只是通过编程实现的。有点像这样的场景:“我用叉子喝汤,汤总是溢出来,我怎么才能去掉这些洞?”——“用勺子?”——“我没有用勺子,我在用叉子。”;)有时还有其他更适合手头任务的工具。:)嵌套片段应该可以,只需使用最新的兼容性库即可。此外,修复代码所需的时间比查找和编写适当的黑客(可靠且经得起未来考验)要少得多,下面答案中的活动标志对您没有帮助,因为它会清除您活动的所有实例(不会有10个堆栈),对非顶级活动调用finish是一种不好的做法。所以,祝你好运。
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.article_activity);
        ActivityHandler.getInstance().add(this);
    
    
    }