使用标志CLEAR_TOP时在堆栈中的活动

时间:2019-05-01 08:21:29

标签: java android android-activity

我在android中完成了与意图标记相关的主任务,并创建了10个活动,每个活动随后都调用下一个活动(MainActivity打开activity2,activity2调用activity3等)。第10个活动使用标志CLEAR TOP调用activity4,所以我猜想,第4个活动出现在屏幕上之后,我不应该返回第10个活动,但是我还是这样做了。有趣的是,当我从第4个导航到第5个活动(通过第10个之后)并返回时,我的堆栈被清除了,我返回了第3个堆栈(但不是第10个)。如何将这种行为应用于第四项活动本身,而无需再次进入第五项?

公共类MyActivity9扩展了AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main9);
    Button b=findViewById(R.id.btn_to_2);
    final Intent intent= new Intent(this,MyActivity10.class);

    b.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            startActivity(intent);
        }
    });
}

}

公共类MyActivity10扩展了AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main10);
    Button b=findViewById(R.id.btn_to_2);
    final Intent intent= new Intent(this,MyActivity4.class);
    //  CLEAR_TOP
    intent.addFlags(FLAG_ACTIVITY_CLEAR_TOP);
    //  CLEAR_TOP
    b.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            startActivity(intent);
        }
    });
}

}

1 个答案:

答案 0 :(得分:0)

我认为在开始任何活动之后,您应该使用finish()方法关闭上一个活动。然后我认为您启动另一个意图没有任何问题。

例如

CriteriaBuilder cBuilder = session.getCriteriaBuilder();
CriteriaQuery<Image> criteriaQuery = cBuilder.createQuery(Image.class);
Root<Image> imageRoot = criteriaQuery.from(Image.class);
Root<Tag> tagRoot = criteriaQuery.from(Tag.class);
Join<Image, Tag> join = imageRoot.join(Image_.TAGS);

List<Predicate> predicateList = new ArrayList<>();

predicateList.add(cBuilder.in(join));
predicateList.add(cBuilder.or(cBuilder.equal(tagRoot.get("tagName"), "träd")));

Predicate finalPredicate = cBuilder.and(predicateList.toArray(new Predicate[0]));
criteriaQuery.select(imageRoot);
criteriaQuery.where(finalPredicate).distinct(true);
org.hibernate.query.Query<Image> imageQuery = session.createQuery(criteriaQuery);

List<Image> images = imageQuery.getResultList();