假设有3个活动:
Activity A
Activity B
Activity C
然后在活动C上,有一个按钮FinishButton
因此,我要在活动C上执行的操作是:
1.如果按下后退按钮,活动C将关闭,然后我们将看到活动B(就像正常行为一样)
2.如果我按FinishButton,活动B和活动C将关闭,那么我们将看到活动A
有办法吗?
我做了一些研究,但只是找到一种方法来结束所有以前的活动。
答案 0 :(得分:2)
您可以结合使用startActivityForResult
和setResult()
。
启动活动C时,请使用startActivityForResult
启动它,然后在活动C中将结果设置为RESULT_CANCELED
。在活动B中检查该标志。如果确定,则什么也不做,但是如果其RESULT_CANCELED
,则只需完成活动B。
您可以按以下方式实现它:
ActivityB.java
public class ActivityB extends AppCompatActivity{
Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
...
//initialize btn;
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startActivityForResult(new Intent(ActivityB.this,ActivityC.class),100);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == 100){
if(resultCode == RESULT_OK){
//Do nothing
} else if (resultCode == RESULT_CANCELED) {
finish();
}
}
}
}
ActivityC.java
public class ActivityC extends AppCompatActivity{
Button btnFinish;
@Override
protected void onCreate(Bundle savedInstanceState) {
...
//initialize btnFinish;
btnFinish.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
setResult(RESULT_CANCELED);
finish();
}
});
}
@Override
public void onBackPressed() {
setResult(RESULT_OK);
finish();
}
}