1

Act 1、Act 2、Act 3 の 3 つのアクティビティがあります。Activity 1 では、ユーザーはタイトル、目的のイベントの説明、ユーザーに通知する日付と時刻を設定します。ユーザーが [DONE] ボタンをクリックすると、通知 ID がアクティビティ 2 に渡され、通知が表示されます。通知する時間になると、ユーザーがアクティビティ 1 で作成したイベントの詳細を示すアクティビティが表示されます。私の問題は、アクティビティ 3 に渡されたデータを表示する方法です。

これは私が取り組んでいるコードです:

アクティビティ 1:

//---Button view---
    Button btnOpen = (Button) findViewById(R.id.button1);
    btnOpen.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {                
            timePicker = ( TimePicker ) findViewById( R.id.timePicker1 );
            datePicker = ( DatePicker ) findViewById( R.id.datePicker1 );      
            title = (EditText) findViewById (R.id.editText1);
            description = (EditText) findViewById (R.id.editText2);

            //---use the AlarmManager to trigger an alarm---
            AlarmManager alarmManager = ( AlarmManager ) getSystemService( ALARM_SERVICE );                 

            //---get current date and time---
            Calendar calendar = Calendar.getInstance();       

            //---sets the time for the alarm to trigger---
            calendar.set( Calendar.YEAR, datePicker.getYear() );
            calendar.set( Calendar.MONTH, datePicker.getMonth() );
            calendar.set( Calendar.DAY_OF_MONTH, datePicker.getDayOfMonth() );                 
            calendar.set( Calendar.HOUR_OF_DAY, timePicker.getCurrentHour() );
            calendar.set( Calendar.MINUTE, timePicker.getCurrentMinute() );
            calendar.set( Calendar.SECOND, 0 );

            //---PendingIntent to launch activity when the alarm triggers---                    
            Intent i = new Intent( NotifyActivity.this, DisplayNotification.class );

            //---assign an ID of 1---
            i.putExtra( "NotifID", 1 ); 

            Intent d = new Intent( NotifyActivity.this, AlarmDetails.class );
            d.putExtra( "Title", title.getText().toString() );
            d.putExtra( "Description", description.getText().toString() );

            PendingIntent displayIntent = PendingIntent.getActivity(
                getBaseContext(), 0, i, 0 );               

            //---sets the alarm to trigger---
            alarmManager.set( AlarmManager.RTC_WAKEUP, 
                calendar.getTimeInMillis(), displayIntent );
            finish();
        }
    }); 

アクティビティ 2:

//---get the notification ID for the notification; 
// passed in by the MainActivity---
int notifID = getIntent().getExtras().getInt( "NotifID" );

//---PendingIntent to launch activity if the user selects 
// the notification---
Intent i = new Intent( DisplayNotification.this, AlarmDetails.class );
i.putExtra( "NotifID", notifID );  

PendingIntent detailsIntent = 
    PendingIntent.getActivity(this, 0, i, 0);

NotificationManager nm = (NotificationManager)
    getSystemService(NOTIFICATION_SERVICE);
Notification notif = new Notification(
    R.drawable.ic_launcher, 
    "iHealthFirst: Notification!",
    System.currentTimeMillis());

CharSequence from = "AlarmManager - New Notification";
CharSequence message = "This is your alert, click to view";        
notif.setLatestEventInfo(this, from, message, detailsIntent);

//---100ms delay, vibrate for 250ms, pause for 100 ms and
// then vibrate for 500ms---
notif.vibrate = new long[] { 100, 250, 100, 500};        
nm.notify(notifID, notif);
//---destroy the activity---
finish();
}

およびアクティビティ 3:

    @Override
public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.alarmdetails);  

    //---look up the notification manager service---
    NotificationManager nm = ( NotificationManager ) 
        getSystemService( NOTIFICATION_SERVICE );

    //---cancel the notification---
    nm.cancel( getIntent().getExtras().getInt( "NotifID" ) ); 

    Bundle extras = getIntent().getExtras(); 
    if(extras !=null)
    {
    String strTitle = extras.getString( "Title" );
    String strDescription = extras.getString( "Description" );
    title.setText( strTitle );
    description.setText( strDescription );
    }
}

アクティビティ3では、これを入れました

        **Bundle extras = getIntent().getExtras(); 
    if(extras !=null)
    {
    String strTitle = extras.getString( "Title" );
    String strDescription = extras.getString( "Description" );
    title.setText( strTitle );
    description.setText( strDescription );
    }**

しかし、詳細を表示できないようです。どんな助けでも本当に感謝しています。ありがとう。

4

1 に答える 1

2

最善の解決策ではないかもしれませんが、 を使用しDefaultSharedPreferencesて値を保存できます。

アクティビティ 3 の値を保存します。

//Determine the String values
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
Int numberOfEvents = preferences.getInt("numberofevents", 0);
numberOfEvents++;
preferences.putString("title" + numberOfEvents, titleVariable);
preferences.putString("description" + numberOfEvents, descriptionVariable);
preferences.putInt("numberofevents", numberOfEvents);
preferences.commit();

アクティビティ 1 のイベントの文字列を使用して何かを行います。

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
int numberOfEvents = preferences.getInt("numberofevents", 0);
for(int i = 0; i < numberOfEvents; i++) {
    String titleVariable = preferences.getString("title" + i, "");
    String descriptionVariable = preferences.getString("description" + i, "");
    if(!titleVariable.equals("") && !descriptionVariable.equals("")) {
        //use the String variables for you notification
    }
}

アクティビティ 3 でイベントを削除する場合:

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
//get id number of event to delete and store it in variable variableNameOfEventNumber
preferences.putString("title" + variableNameOfEventNumber, "");
preferences.putString("description" + variableNameOfEventNumber, "");
preferences.commit();

これが役立つことを願っています。

于 2012-10-27T15:59:53.070 に答える