【问题标题】:Android - Close first activityAndroid - 关闭第一个活动
【发布时间】:2015-08-19 20:34:20
【问题描述】:

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

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

现在我想做的是:当第 10 个Article 打开时,我想关闭第一个Article 活动(不是MainActivity)。

我也读过这个question,但它只有在你有不同的活动(即活动A、活动B、活动C...)时才有效。

有什么办法可以做到吗?

【问题讨论】:

  • 如果您在 Fragments 上构建您的应用程序,您可以在将 Fragments 添加到后台堆栈并删除旧标签时简单地使用计数器。考虑:stackoverflow.com/questions/22474584/…
  • 我看到在fragments可以做到,但实际上我没有使用它们,我目前正在使用Activity
  • 我知道,我建议您改用片段,因为它更适合您正在尝试做的事情。对最终用户没有影响,只是以编程方式。
  • 有点像这样的场景:“我用叉子吃汤,汤总是溢出来,我怎样才能把洞去掉?” ——“用勺子”——“我不用勺子,我用叉子”。 ;) 有时还有其他工具更适合手头的任务。 :)
  • 嵌套片段应该没问题,只要使用他最新的兼容性库。此外,与查找和编写适当的 hack(可靠且面向未来)相比,修复代码所需的时间要少得多,下面答案中的活动标志对您没有帮助,因为它会清除您活动的所有实例(不会有 10 个堆栈)并且在非顶级活动上调用完成是不好的做法。所以,祝你好运。

标签: java android android-activity


【解决方案1】:

打开第 10 篇文章时,这样做:

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

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

【讨论】:

    【解决方案2】:

    这是一个 hack,只是为了让它工作,但您可能想尝试从您的描述中提取片段;

    1. 创建一个名为 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();         
          }
      }   
      }
      

    在您的 ArticleActivity 的 OnCreateMethod 中:

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.article_activity);
        ActivityHandler.getInstance().add(this);
    
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-12
      • 2021-09-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多