2016-03-04 72 views
2

我有3项活动FirstActivity,SecondActivity和ThirdActivity。 FirstActivity会导致SecondActivity导致ThirdActivity。我希望能够在FirstActivity和SecondActivity,FirstActivity和ThirdActivity之间来回移动。有没有更好的方法来完成另一项活动的活动?

以下是我已经实现:

FirstActivity:

在FirstActivity我有一个onClick方法 'goToSecondActivity',开始SecondActivity

public void goToSecondActivity(View view){ 
     Intent i = new Intent(this, SecondActivity.class); 
     final EditText firstText = (EditText) findViewById(R.id.firstText); 
     String userMessage = firstText.getText().toString(); 
     if(!"".equals(userMessage)) 
     i.putExtra("firstMessage",userMessage); 

     startActivity(i); 
    } 

enter image description here

SecondActivity:

在SecondActivity再次我有一个onClick方法 'goToThirdActivity',这将启动ThirdActivity

public void goToThirdActivity(View view){ 
     Intent i = new Intent(this , ThirdActivity.class); 
     startActivity(i); 
    } 

enter image description here

ThirdActivity:

在ThirdActivity我有两个的onClick方法 'backToFirstActivity'和'backToPreviousActivity'在两个不同的按钮上

enter image description here

On ThirdActivity当我点击'返回到第一个活动'按钮时,我想回到FirstActivity。

我做了什么:

SecondActivity:

我已经声明为static变量

static SecondActivity secondActivityMain; 

而且在onCreate方法为它分配:

protected void onCreate(Bundle savedInstanceState) { 
     --- 
     --- 
     secondActivityMain = this; 
     --- 
     --- 

} 

ThirdActivity:

使用静态变量结束SecondActivity “SecondActivity.secondActivityMain.finish();”

public void backToFirstActivity(View view) { 
     Toast.makeText(getApplicationContext(), "Third: finished second activity ", 
       Toast.LENGTH_SHORT).show(); 

     new Handler().postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       SecondActivity.secondActivityMain.finish(); 
       ThirdActivity.this.finish(); 
      } 
     }, 2000); 

    } 

我的问题是:

1.是否有更好的方法来从另一个活动完成的活动?

2.这种方式是正确的吗?

+0

请检查FLAG_ACTIVITY_CLEAR_TOP。 [http://stackoverflow.com/questions/7385443/flag-activity-clear-top-in-android](http://stackoverflow.com/questions/7385443/flag-activity-clear-top-in-android ) –

回答

1
  1. 有没有更好的办法从另一个活动完成的活动?

,您所做的一切用在Activitystatic instace这很容易导致内存泄漏问题。 只有在必要和非常小心的情况下,才会使用static关键字。

更好的方式是使用BroadCastreceiver

所以,你需要做的是建立在你的第一和第二活性广播接收器和whenver你要完成这些活动。使用​​方法。

你需要搜索它如何在Android中工作Broadcastreceiver

  1. 这种方式是正确的吗?

没有,你做的方式是不正确的。

+0

感谢您的回答。 – Pallavi

+0

我有很多搜索将我的示例转换为广播,但我没有得到如何将我的SecondActivity转换为接收广播。请建议 – Pallavi

2

如果你想从ThirdActivity去FirstActivity使用这项意图用标志“FLAG_ACTIVITY_CLEAR_TOP”,它会清除第三和第二活动

Intent intent = new Intent(ThirdActivity.this, MainActivity.class); 
      intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
      startActivity(intent); 

对于FirstActivity在Manifeast文件,如果你指定的android:launchMode =“singleTop “那么当你从ThirdActivity来到FirstActivity时,OnCreate()方法将不会被调用 如果你没有在manifest文件中指定lanuhMode,那么将再次调用OnCreate