多個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()");
    }
}

這樣即可實現輪詢自動切換




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