需求:
现有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()");
}
}
这样即可实现轮询自动切换