例如,用户在活动A到B之间进行了传递。现在完成A并将B传递给C,然后完成B。然后单击返回按钮并再次进入B。因为B是用户来自当前活动(ActivityC)的活动。如果用户直接从A转到C,则完成A。如果按返回按钮,则再次转到A。因为A是用户来自于当前(ActivityC)活动的活动。 我想设置onBackPress按钮以启动有序启动的活动。如果我没有完成在开始另一个活动之前开始的活动,则可以使用finish()当前活动显示之前开始的活动。这个有可能。因为我没有完成任何活动。因此,finish()当前活动将导致之前开始的show活动。但是,RAM可能会在我打开50个活动时过载。因此由于这个问题,我需要完成之前开始的finish()活动。另一方面,单击后退按钮时,我想启动有序启动的活动。例如
ActivityA --> ActivityB --> ActivityC --> ActivityD
在这种情况下,我按顺序完成ActivityA,ActivityB和ActivityC。但是我想在按下ActivityD时启动ActivityC,而我想在按下ActivityC时启动ActivityB。
最后,我在应用程序中有一条复杂的路径。而且,我导航到ActivityD并在当前活动为ActivityF时完成了ActivityF
ActivityF --> ActivityD
ActivityF finished
当前活动:
ActivityD
在这种情况下,我想启动ActivityF而不是ActivityD的后退按钮上的ActivityC。
通常:
ActivityA --> ActivityB --> ActivityC --> ActivityD /// click back button
ActivityA --> ActivityB --> ActivityC /// click back button
ActivityA --> ActivityB /// click back button
ActivityA
或
ActivityA --> ActivityF --> ActivityD /// click back button
ActivityA --> ActivityF /// click back button
ActivityA
但是我想生成这种情况:
ActivityA
--> ActivityB
--> ActivityC
--> ActivityD /// click back button
ActivityC <-- /// click back button
ActivityB <-- /// click back button
ActivityA
或
ActivityA
--> ActivityF
--> ActivityD /// click back button
ActivityF <-- /// click back button
ActivityA <--
答案 0 :(得分:1)
您应该使用Stack
来跟踪您的活动。
Stack in Android
只需将当前“活动”之前的“意图”推入下一个活动,然后以onBackPressed()
方法弹出当前活动。
您可以将Stack
保存在SharedPreference
上。
编辑:
这是代码。我使用了DataHandler类来保存Stack
。
DataHandler.java
public class DataHandler {
private static DataHandler mDataHandler;
private Deque<Intent> stack = new ArrayDeque<>();
private DataHandler() {
}
public static DataHandler getInstance(){
if(mDataHandler == null){
mDataHandler = new DataHandler();
}
return mDataHandler;
}
public Deque<Intent> getStack() {
return stack;
}
public void setStack(Deque<Intent> stack) {
this.stack = stack;
}
}
M1Activity.java
public class M1Activity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_m1);
Button btn = findViewById(R.id.btn);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(M1Activity.this,M2Activity.class);
startActivity(intent);
DataHandler.getInstance().getStack().push(intent);
finish();
}
});
}
@Override
public void onBackPressed() {
super.onBackPressed();
if (DataHandler.getInstance().getStack().size() > 0){
Intent intent = DataHandler.getInstance().getStack().pop();
startActivity(intent);
}
}
}
就像M1Activity一样,您必须在每个Stack
中从Activity
推送和弹出意图。
答案 1 :(得分:0)
您可以使用
if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
finish();
} else {
ActivityCompat.finishAffinity(RatingReviewActivity.this);
}
答案 2 :(得分:0)
您需要将ActivityA(父活动)名称传递给ActivityB(子活动),以保留对父活动的引用,并在开始父活动所需的0-9
方法中使用它。
开始活动时:
onBackPressed
在儿童活动中:
private void startActivity(){
Intent intent =new Intent(this, ActivityB.class);
intent.putExtra("parentClassName",this.getClass().getName());
startActivity(intent);
finish();
}