1

我有一个 MainActivity,我在 onCreate() 方法中定义了下面的代码。目的是,当 MainActivity 获得额外的 String "EXIT" 然后显示 Toast 消息:

Intent current = getIntent();
if (current !=null && current.getStringExtra("EXIT") != null) {
    Toast.makeText(this, "exiting", Toast.LENGTH_LONG).show(); 
}       

此 MainActivity 在某些按钮按下时启动另一个活动“DayOne”,例如:

public void processGo(View v){
    Intent i = new Intent(MainActivity.this,DayOne.class);
    i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    MainActivity.this.startActivity(i);
}

现在我在放置额外的字符串“EXIT”后从“DayOne”返回到 MainActivity。这是我在 onOptionsItemSelected(MenuItem item) 方法中做的:

public boolean onOptionsItemSelected(MenuItem item){
if(item.getTitle().equals("Exit")){
    Intent i = new Intent(DayOne.this,MainActivity.class);
    i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    i.putExtra("EXIT", "EXIT");
    startActivity(i);
    finish();
}
return super.onOptionsItemSelected(item);
}

问题是,当从 DayOne 使用额外的字符串“EXIT”调用 MainActivity 时;我没有看到 MainActivity 中定义的 Toast 消息。这里有什么遗漏或错误?

感谢任何帮助。

4

4 回答 4

1

感谢大家的评论和帮助。

我已经弄清楚了这里的问题。这是因为清单文件有条目 android:launchMode="singleInstance" 两个活动(MainActivity 和 DayOne 活动)..

从那里删除它,它工作正常。

于 2013-09-21T07:47:42.847 回答
0

它为我工作。

主要活动:

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Intent current = getIntent();
    if (current != null && current.getStringExtra("EXIT") != null) {
        Toast.makeText(this, "exiting", Toast.LENGTH_LONG).show();
    }
}

public void processGo(View view) {
    Intent i = new Intent(MainActivity.this, OneDayActivity.class);
    i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(i);
}

}

一日活动:

public class OneDayActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_day_one);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.day_one, menu);
    return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if (item.getTitle().equals("Exit")) {
        Intent i = new Intent(this, MainActivity.class);
        i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        i.putExtra("EXIT", "EXIT");
        startActivity(i);
        finish();
    }
    return super.onOptionsItemSelected(item);
}

}
于 2013-09-21T06:40:34.590 回答
0

不要清除堆栈,而不是当您回到主要活动(使用“EXIT”字符串)时想要执行某些任务时,您也可以使用以下方法来实现onActivityResult

 public void processGo(View v){
        Intent i = new Intent(MainActivity.this,DayOne.class);
        MainActivity.this.startActivity(i,10); // 10 is the id to handle
    }



 @Override
    public void onActivityResult( int requestCode, int resultCode, Intent data )
    {
        super.onActivityResult( requestCode, resultCode, data );
        switch ( requestCode )
        {
            case ( 10 ): // id that we pass on start activity
            {
                if ( resultCode == Activity.RESULT_OK )
                {


                 Toast.makeText(this, "exiting"+data.getStringExtra( "EXIT", "" ),  Toast.LENGTH_LONG).show(); 
                }
            }
            break;
       }
  }

完成时

public boolean onOptionsItemSelected(MenuItem item){
if(item.getTitle().equals("Exit")){
        Intent resultIntent = new Intent();
        resultIntent.putExtra( "EXIT", "EXIT" );
        setResult( Activity.RESULT_OK, resultIntent );
        finish();
}
return super.onOptionsItemSelected(item);
}

完成后,它将返回主活动并onActivityResult自动调用您可以执行任务的位置。

很抱歉错字希望它会有所帮助。

于 2013-09-21T07:28:10.390 回答
0

首先检查你null然后得到Intent String,你能在 MainActivity@ 的 onCreate 中让你的代码如下所示

Bundle extra= getIntent().getExtras();
if(extra!=null){

 String _StrExit=extra.getString("EXIT");

 if(_StrExit.equalsIgnoreCase("EXIT")){
 Toast.makeText(this, "exiting", Toast.LENGTH_LONG).show(); 
    }
  }

更新 从 menuitem 调用 Intent 时进行更改

 public boolean onOptionsItemSelected(MenuItem item){
    if(item.getTitle().equals("Exit")){
        Intent i = new Intent(DayOne.this,MainActivity.class);
        i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        String _Str="EXIT";
        i.putExtra("EXIT", _Str);
        startActivity(i);
        finish();
    }

return super.onOptionsItemSelected(item);
}
于 2013-09-21T06:11:40.640 回答