如何使用恢复按钮进入最后 activity?
How can go in last activity with resume button?
我的应用程序运行良好,但我的目的是当我关闭该应用程序然后再次 运行 它时,我的应用程序在最后 activity 打开。我希望当我再次打开 main activity 时显示,如果我单击 resume 然后最后 activity 打开。所以我有 4 个 Activity
叫 Main Activity (my main)
, p1
,p2
, p3
:
主要Activity:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_page);
Button resume=(Button)findViewById(R.id.resume);
Button next=(Button)findViewById(R.id.next);
Button exit=(Button)findViewById(R.id.exit);
resume.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!isTaskRoot()
&& getIntent().hasCategory(Intent.CATEGORY_LAUNCHER)
&& getIntent().getAction() != null
&& getIntent().getAction().equals(Intent.ACTION_MAIN)) {
finish();
return;
}
}
});
next.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, p1.class);
startActivity(intent);
}
});
exit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
moveTaskToBack(true);
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(1);
}
});
}
}
XML布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:text="resume"
android:layout_width="wrap_content"
android:id="@+id/resume"
android:layout_height="wrap_content" />
<Button
android:text="next"
android:id="@+id/next"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Button
android:id="@+id/exit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="exit"/>
</LinearLayout>
p1:
public class p1 extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.p1);
Button next = (Button) findViewById(R.id.next);
Button home=(Button)findViewById(R.id.home);
next.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(p1.this,p2.class);
startActivity(intent);
}
});
home.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(p1.this,MainActivity.class);
startActivity(intent);
}
});
}
}
p1 XML 布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:text="next"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/next"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="page 1"/>
<Button
android:text="go in main"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/home"/>
</LinearLayout>
和 p2, p3 喜欢 p1
例如:当我在 p2 时,然后单击进入主程序,然后在主程序中单击退出并重新 运行 我的应用程序,我的应用程序在 p2 中打开我想当我重新 运行 app main activity 打开如果我点击resume 然后p2 来显示。
要在重新启动时打开主activity,您应该调用
private void FinishActivity(){
this.finish();
}
在 startActivity(intent);
之后的 onClick 事件中
为了恢复您的 activity 存储当前 activity class 作为共享首选项的字符串
在 moveTaskToBack(true);
之前在您的代码中调用以下方法
private void storeCurrentActivity(){
SharedPreferences myPref =getSharedPreferences("APP_SHARED_PREF", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = myPref.edit();
editor.clear();
String packageName = this.getPackageName();
String className = this.getClass().getSimpleName();
editor.putString("lastactivity",packageName+"."+className);
editor.commit();
}
并将结果存储到共享首选项中
当您返回到您的应用程序时,只需检查 SharedPreference
在 setContentView(R.layout.main_page);
之后的主 activity 中使用以下代码
String lastActivity= getLastActivity();
try {
Intent fooActivity = new Intent(this,Class.forName(lastActivity))
startActivity(fooActivity)
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
将此方法放在您的 MainActivity 中
private String getLastActivity(){
SharedPreferences myPref = = getSharedPreferences("APP_SHARED_PREF", Context.MODE_PRIVATE);
String lastActivity= myPref.getString("lastactivity","");
}
这可能对你有帮助
解决这个具体问题
用以下代码替换您的主页按钮操作
home.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(p1.this,MainActivity.class);
startActivity(intent);
storeCurrentActivity();
this.finish();
}
});
上面的代码将存储你的活动,即如果你在 activity p1,它会将 p1 存储为最后一个 activity
另外请删除onResume
操作
我会根据 Clifford 的回复为您提出解决方案,因为您无法理解他的回答,尽管我很清楚。
上述方法将 activity 存储在 SharedPreferences
private void storeCurrentActivity(){
SharedPreferences myPref =getSharedPreferences("APP_SHARED_PREF", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = myPref.edit();
editor.putString("lastactivity",this.getClass().getSimpleName());
editor.commit();
}
放置此方法并在每个 Activity 的所有 onResume 中调用他,除了 Main:
@Override
public void onResume(){
super.onResume();
storeCurrentActivity();
}
在您的简历按钮中,只需调用上次保存的 Activity
resume.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SharedPreferences myPref = getSharedPreferences("APP_SHARED_PREF", Context.MODE_PRIVATE);
String lastActivity= myPref.getString("lastactivity","");
try {
Intent fooActivity = new Intent(this,Class.forName(lastActivity))
startActivity(fooActivity)
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
});
经过一番尝试,这就是我对问题的回答
主要 activity :
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_page);
Button resume = (Button) findViewById(R.id.resume);
Button next = (Button) findViewById(R.id.next);
Button exit = (Button) findViewById(R.id.exit);
resume.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String lastActivity= getLastActivity();
try {
if(!lastActivity.equals(""))
{
Toast.makeText(getApplicationContext(),"previous activity :"+lastActivity, Toast.LENGTH_SHORT).show();
Intent fooActivity = new Intent(MainActivity.this,Class.forName(lastActivity));
startActivity(fooActivity);
MainActivity.this.finish();
} else {
Toast.makeText(getApplicationContext(),"no previous activity !", Toast.LENGTH_SHORT).show();
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
});
next.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, p1.class);
startActivity(intent);
}
});
exit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
});
}
private String getLastActivity(){
SharedPreferences myPref = getSharedPreferences("APP_SHARED_PREF", Context.MODE_PRIVATE);
String lastActivity= myPref.getString("lastactivity","");
return lastActivity;
}
}
p1,p2,p3 :
public class p1 extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.p1);
Button next = (Button) findViewById(R.id.next);
Button home=(Button)findViewById(R.id.home);
next.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(p1.this, p2.class);
startActivity(intent);
}
});
home.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(p1.this,MainActivity.class);
storeCurrentActivity();
startActivity(intent);
p1.this.finish();
}
});
}
private void storeCurrentActivity(){
SharedPreferences myPref =getSharedPreferences("APP_SHARED_PREF", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = myPref.edit();
editor.clear();
String packageName = this.getPackageName();
String className = this.getClass().getSimpleName();
editor.putString("lastactivity",packageName+"."+className);
editor.commit();
}
}
我的应用程序运行良好,但我的目的是当我关闭该应用程序然后再次 运行 它时,我的应用程序在最后 activity 打开。我希望当我再次打开 main activity 时显示,如果我单击 resume 然后最后 activity 打开。所以我有 4 个 Activity
叫 Main Activity (my main)
, p1
,p2
, p3
:
主要Activity:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_page);
Button resume=(Button)findViewById(R.id.resume);
Button next=(Button)findViewById(R.id.next);
Button exit=(Button)findViewById(R.id.exit);
resume.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!isTaskRoot()
&& getIntent().hasCategory(Intent.CATEGORY_LAUNCHER)
&& getIntent().getAction() != null
&& getIntent().getAction().equals(Intent.ACTION_MAIN)) {
finish();
return;
}
}
});
next.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, p1.class);
startActivity(intent);
}
});
exit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
moveTaskToBack(true);
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(1);
}
});
}
}
XML布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:text="resume"
android:layout_width="wrap_content"
android:id="@+id/resume"
android:layout_height="wrap_content" />
<Button
android:text="next"
android:id="@+id/next"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Button
android:id="@+id/exit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="exit"/>
</LinearLayout>
p1:
public class p1 extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.p1);
Button next = (Button) findViewById(R.id.next);
Button home=(Button)findViewById(R.id.home);
next.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(p1.this,p2.class);
startActivity(intent);
}
});
home.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(p1.this,MainActivity.class);
startActivity(intent);
}
});
}
}
p1 XML 布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:text="next"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/next"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="page 1"/>
<Button
android:text="go in main"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/home"/>
</LinearLayout>
和 p2, p3 喜欢 p1
例如:当我在 p2 时,然后单击进入主程序,然后在主程序中单击退出并重新 运行 我的应用程序,我的应用程序在 p2 中打开我想当我重新 运行 app main activity 打开如果我点击resume 然后p2 来显示。
要在重新启动时打开主activity,您应该调用
private void FinishActivity(){
this.finish();
}
在 startActivity(intent);
为了恢复您的 activity 存储当前 activity class 作为共享首选项的字符串
在 moveTaskToBack(true);
private void storeCurrentActivity(){
SharedPreferences myPref =getSharedPreferences("APP_SHARED_PREF", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = myPref.edit();
editor.clear();
String packageName = this.getPackageName();
String className = this.getClass().getSimpleName();
editor.putString("lastactivity",packageName+"."+className);
editor.commit();
}
并将结果存储到共享首选项中
当您返回到您的应用程序时,只需检查 SharedPreference
在 setContentView(R.layout.main_page);
String lastActivity= getLastActivity();
try {
Intent fooActivity = new Intent(this,Class.forName(lastActivity))
startActivity(fooActivity)
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
将此方法放在您的 MainActivity 中
private String getLastActivity(){
SharedPreferences myPref = = getSharedPreferences("APP_SHARED_PREF", Context.MODE_PRIVATE);
String lastActivity= myPref.getString("lastactivity","");
}
这可能对你有帮助
解决这个具体问题
用以下代码替换您的主页按钮操作
home.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(p1.this,MainActivity.class);
startActivity(intent);
storeCurrentActivity();
this.finish();
}
});
上面的代码将存储你的活动,即如果你在 activity p1,它会将 p1 存储为最后一个 activity
另外请删除onResume
操作
我会根据 Clifford 的回复为您提出解决方案,因为您无法理解他的回答,尽管我很清楚。
上述方法将 activity 存储在 SharedPreferences
private void storeCurrentActivity(){
SharedPreferences myPref =getSharedPreferences("APP_SHARED_PREF", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = myPref.edit();
editor.putString("lastactivity",this.getClass().getSimpleName());
editor.commit();
}
放置此方法并在每个 Activity 的所有 onResume 中调用他,除了 Main:
@Override
public void onResume(){
super.onResume();
storeCurrentActivity();
}
在您的简历按钮中,只需调用上次保存的 Activity
resume.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SharedPreferences myPref = getSharedPreferences("APP_SHARED_PREF", Context.MODE_PRIVATE);
String lastActivity= myPref.getString("lastactivity","");
try {
Intent fooActivity = new Intent(this,Class.forName(lastActivity))
startActivity(fooActivity)
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
});
经过一番尝试,这就是我对问题的回答
主要 activity :
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_page);
Button resume = (Button) findViewById(R.id.resume);
Button next = (Button) findViewById(R.id.next);
Button exit = (Button) findViewById(R.id.exit);
resume.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String lastActivity= getLastActivity();
try {
if(!lastActivity.equals(""))
{
Toast.makeText(getApplicationContext(),"previous activity :"+lastActivity, Toast.LENGTH_SHORT).show();
Intent fooActivity = new Intent(MainActivity.this,Class.forName(lastActivity));
startActivity(fooActivity);
MainActivity.this.finish();
} else {
Toast.makeText(getApplicationContext(),"no previous activity !", Toast.LENGTH_SHORT).show();
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
});
next.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, p1.class);
startActivity(intent);
}
});
exit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
});
}
private String getLastActivity(){
SharedPreferences myPref = getSharedPreferences("APP_SHARED_PREF", Context.MODE_PRIVATE);
String lastActivity= myPref.getString("lastactivity","");
return lastActivity;
}
}
p1,p2,p3 :
public class p1 extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.p1);
Button next = (Button) findViewById(R.id.next);
Button home=(Button)findViewById(R.id.home);
next.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(p1.this, p2.class);
startActivity(intent);
}
});
home.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(p1.this,MainActivity.class);
storeCurrentActivity();
startActivity(intent);
p1.this.finish();
}
});
}
private void storeCurrentActivity(){
SharedPreferences myPref =getSharedPreferences("APP_SHARED_PREF", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = myPref.edit();
editor.clear();
String packageName = this.getPackageName();
String className = this.getClass().getSimpleName();
editor.putString("lastactivity",packageName+"."+className);
editor.commit();
}
}