多个Activity轮训切换的实现

需求:

现有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()");
    }
}

这样即可实现轮询自动切换




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章