Я думаю, что ваш желаемый сценарий обычно невозможен. Из-за Задачи и стек Back говорит:
Когда пользователь нажимает кнопку Back, текущая активность прерывается извершина стека (активность уничтожена)
Так что, если ваша задача A -> B -> A (дубликат) и пользователь нажимает кнопку назад, он возвращается к B, а A - уничтожено и он не может вернуться к A.
Я написал древовидные действия A, A1, A2, которые имеют такое поведение:
Main -> A -> A1 -> A2 -> A1 (дублировано)
Далее, когда пользователь нажимает НАЗАД в A2:
A1 -> A2 -> A1 (то же самое) -> A -> Main
Это их коды:
Деятельность A:
package t.t;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class TaskTestActivity extends Activity {
Button btn;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main0);
btn = (Button) findViewById(R.id.button1);
btn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
Intent i = new Intent(TaskTestActivity.this, TaskTestActivity1.class);
i.putExtra("loader", "A");
TaskTestActivity.this.startActivity(i);
}
});
}
}
Действие A1:
package t.t;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;
public class TaskTestActivity1 extends Activity {
Button btn;
String str = "";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main1);
btn = (Button) findViewById(R.id.button1);
btn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
Intent i = new Intent(TaskTestActivity1.this, TaskTestActivity2.class);
i.putExtra("loader", "A1");
TaskTestActivity1.this.startActivity(i);
}
});
}
@Override
public void onBackPressed() {
System.out.println(str);
if(str.equals("ali")){
Intent i = new Intent(this,TaskTestActivity2.class);
this.startActivity(i);
str = "";
System.out.println("BACK");
}else{
Intent i = new Intent(this,TaskTestActivity.class);
this.startActivity(i);
str = "";
System.out.println("BACK1");
}
}
@Override
protected void onNewIntent(Intent intent) {
// TODO Auto-generated method stub
super.onNewIntent(intent);
str = "ali";
}
}
Действие A2:
package t.t;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;
public class TaskTestActivity2 extends Activity {
Button btn;
int i = 0;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn = (Button) findViewById(R.id.button1);
btn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
Intent i = new Intent(TaskTestActivity2.this,
TaskTestActivity1.class);
i.putExtra("loader", "A2");
TaskTestActivity2.this.startActivity(i);
}
});
}
}
Обратите внимание, что я переопределяю onBackPressed () в действии A1, и вы бычтобы определить, хотите ли вы вернуться в А2 или А, поэтому я добавляю дополнительный элемент к намерению и переопределяю onNewIntent (намерение намерения) в манифесте проекта A1.Мой проект:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="t.t"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="15" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" android:hardwareAccelerated="true">
<activity
android:label="A"
android:launchMode="standard"
android:name=".TaskTestActivity" >
<intent-filter >
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:label="A2"
android:launchMode="singleInstance"
android:name=".TaskTestActivity2" >
</activity>
<activity android:name="TaskTestActivity1" android:launchMode="singleTask" android:label="A1"></activity>
</application>
</manifest>
Оплата атрибутаДобавьте к свойствам " singleInstance " и " singleTask " элементы Elements. Наконец, вы можете использовать эти макеты для своих действий, чтобы убедиться, что A1 дублирован:
main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="A2"
android:textAppearance="?android:attr/textAppearanceLarge" />
<RatingBar
android:id="@+id/ratingBar1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
main1.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="A1"
android:textAppearance="?android:attr/textAppearanceLarge" />
<RatingBar
android:id="@+id/ratingBar1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
main0.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="A"
android:textAppearance="?android:attr/textAppearanceLarge" />
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />
</LinearLayout>