したがって、このアプリケーションは 1 つの 2 つのアクティビティで構成されています。1 つ目は、通知の作成に関する仕様をユーザーに尋ねます。ボタンをクリックすると、アクティビティが通知を作成します。このアクティビティのコードは次のとおりです。
package com.dewey.notifymanager;
import java.util.Random;
import android.os.Bundle;
import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.support.v4.app.NotificationCompat;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Button button = (Button) findViewById(R.id.button1);
final TextView texty = (TextView) findViewById(R.id.textView2);
final EditText input = (EditText) findViewById(R.id.editText1);
final EditText input2 = (EditText) findViewById(R.id.editText2);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
String notificationmessage = input.getText().toString();
String notificationdetails = input2.getText().toString();
texty.setText("Notification Created");
displayNotification(notificationmessage, notificationdetails);
}
});
}
@Override
protected void onStart() {
super.onStart();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
public void displayNotification(String msg,String details)
{
NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
Notification notification = new Notification(R.drawable.ic_launcher, msg, System.currentTimeMillis());
Random generator = new Random();
int i = 90686958 - generator.nextInt(92938);
Intent intent = new Intent(this, ResultActivity.class);
intent.putExtra("details", details);
intent.putExtra("msg", msg);
intent.putExtra("id", i);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);
notification.setLatestEventInfo(this, msg, details, pendingIntent);
notification.flags = notification.FLAG_ONGOING_EVENT;
manager.notify(i, notification);
}
}
通知がクリックされると、新しいアクティビティが起動され、通知 ID を含むいくつかのデータがインテントで渡されます。2 番目のアクティビティは、通知に含まれていたデータを表示し、ボタンも備えています。ユーザーがこのボタンをクリックすると、通知が削除されます。2 番目のアクティビティのコードは次のとおりです。
package com.dewey.notifymanager;
import android.os.Bundle;
import android.app.Activity;
import android.app.NotificationManager;
import android.content.Context;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class ResultActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(null);
setContentView(R.layout.activity_result);
String details = getIntent().getExtras().getString("details");
String msg = getIntent().getExtras().getString("msg");
final int id = getIntent().getExtras().getInt("id");
TextView title = (TextView)findViewById(R.id.title);
TextView descrip = (TextView)findViewById(R.id.details);
title.setText(msg);
descrip.setText(details);
Button exitButton = (Button)findViewById(R.id.exitButton);
exitButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
NotificationManager notificationManager = (NotificationManager)
getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.cancel(id);
finish();
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_result, menu);
return true;
}
}
アプリを実行すると、奇妙な動作をします。通知を作成してクリックすると、2 番目のアクティビティが起動され、正しいデータが表示され、完了ボタンによって通知がステータス バーから削除されます。しかし、2 番目の通知を作成してクリックすると、2 番目のアクティビティが起動されますが、最初のアプリケーションに含まれていた古いデータが表示されます。これが起こらないようにする必要があります。
これまでのところ、アクティビティがsavedInstanceStateを再開しているという事実に問題があると思いますが、2番目のアクティビティで「null」に設定しました。私の問題は正確には何ですか?
アクティビティがsavedInstanceStateを再開することに関する問題ですか、それとも私のロジックですか?
助けてくれてありがとう。