需求:
現有A B C 3個Activity,需要實現A-B-C-A-B-C....這樣輪訓切換,需求比較奇葩,但是工作上有事還真要用到。。。
方案:
用一個主Activity(MainActivity)控制ABC, MainActivity中startActivityForResult(intentA, 0)啓動A
AActivity通過setResult返回一個int值1,並調用finish方法返回到MainActivity,此時會調用MainActivity的onActivityResult方法,
只需要在該方法中匹配返回值1,再啓動BActivity.。。。如此延續即可。
項目結構如下:
MainActivity.java
package com.cxq.testdemo;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
//輪播的次數
int cycleCount = 3;
//參與輪播的activity個數
int activityCount = 3;
//activity切換的總次數
int totalCount;
Button start, end;
private String TAG = MainActivity.class.getName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
start = (Button) findViewById(R.id.start_btn);
end = (Button) findViewById(R.id.end_btn);
}
public void start(View v) {
Log.e(TAG, "start");
totalCount = cycleCount * activityCount;
Intent intent = new Intent();
intent.setClass(MainActivity.this, AActivity.class);
startActivityForResult(intent, 0);
}
public void end(View v) {
Log.e(TAG, "end");
}
public void startNextAct(Class cls, int resultCode) {
if (totalCount > 0) {
if (totalCount == 1 && resultCode == 3) {
Toast.makeText(MainActivity.this, "sucessus", Toast.LENGTH_SHORT).show();
return;
}
Intent intent = new Intent();
intent.setClass(MainActivity.this, cls);
startActivityForResult(intent, 0);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.e(TAG, " " + totalCount);
switch (resultCode) {
case 1:
Log.e(TAG, "A is finished " + requestCode);
startNextAct(BActivity.class, resultCode);
break;
case 2:
Log.e(TAG, "B is finished " + requestCode);
startNextAct(CActivity.class, resultCode);
break;
case 3:
Log.e(TAG, "C is finished " + requestCode);
startNextAct(AActivity.class, resultCode);
break;
default:
break;
}
totalCount--;
}
}
給出一個AActivity的例子,B C類似,因此不再給出
package com.cxq.testdemo;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
public class AActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_a);
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(2000);
setResult(1);
finish();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
thread.start();
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.e("cxq","onDestroy()");
}
@Override
public void finish() {
super.finish();
Log.e("cxq", "finish()");
}
}
這樣即可實現輪詢自動切換