将第一个活动置于后台堆栈之上

时间:2014-10-15 19:18:10

标签: java android

我有两个应用程序,每个应用程序都有一个活动。应用程序A和应用程序B.应用程序A的活动的启动类型为SingleTask。两个活动都有按钮互相呼叫。我想要的是,当我从活动B按钮启动活动A时,按钮又从活动A按钮启动,然后当我按回按钮时,活动B应该到达前台。但相反,它会回到发射器。我附上了代码供参考。

应用程序A MainActivity: -

package com.example.appa;

import android.support.v7.app.ActionBarActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;


public class MainActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button b1= (Button)findViewById(R.id.button1);
        b1.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
            Intent i =new Intent();
            i.setClassName("com.example.appb", "com.example.appb.MainActivity");
            startActivity(i);
            }
        });
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

申请清单: -

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.appa"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="21" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:launchMode="singleTask"
             >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

应用程序B MainActivity:

package com.example.appb;

import com.example.appb.R;

import android.support.v7.app.ActionBarActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;


public class MainActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button b1= (Button)findViewById(R.id.button1);
        b1.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
            Intent i =new Intent();
            i.setClassName("com.example.appa", "com.example.appa.MainActivity");
            i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);

            startActivity(i);
            }
        });
    }

应用程序B清单是未修改的默认主要文件

可以看出我已经尝试过FLAG_ACTIVITY_REORDER_TO_FRONT,但它没有帮助。

P.S: - 我无法在应用程序A中更改启动类型的活动

提前致谢

1 个答案:

答案 0 :(得分:1)

singleTask启动模式与该行为不兼容。您可以通过设置标志每次启动活动时设置不同的启动模式,但更好的方法可能是重新评估默认启动模式的选择。

Tasks and back stack article