1

MainActivity が 1 つあり、onCreate() メソッドで以下のコードを定義しました。意図は、MainActivity が余分な文字列 "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);
}

問題は、MainActivity が DayOne から余分な文字列「EXIT」で呼び出される場合です。MainActivity で定義されたトースト メッセージが表示されません。ここで何が欠けているか間違っていますか?

どんな助けにも感謝します。

4

4 に答える 4

1

コメントと助けてくれてありがとう。

私はここで問題を理解しました。これは、マニフェスト ファイルに、両方のアクティビティ (MainActivity と DayOne アクティビティ) のエントリ android:launchMode="singleInstance" が含まれていたためです。

そこから削除すると、うまくいきました。

于 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

最初に確認して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(); 
    }
  }

メニュー項目から 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 に答える