2016-07-16 21 views
0

Ich habe Listenansicht der Ereignisse mit ihren Daten angepasst. Wenn die Verwendung ein bestimmtes Element in der Liste auswählt, fragt mein Programm, ob der Benutzer an dieses Ereignis erinnert werden soll. Ich habe Probleme, die Ereignisse zu wiederholen. Wenn ich zum Beispiel für die Position 1 die Erinnerung auf 14:15 Uhr und für die Position 2 festlege, setze ich die Erinnerung auf 2:30. Die Benachrichtigung der zweiten Liste wird angezeigt, wobei die erste ignoriert wird. Ich möchte, dass beide Benachrichtigungen zu ihrer jeweiligen Zeit angezeigt werden.Android Listenansicht Looping

Kann jemand herausfinden und mir helfen, wie die Liste zu loopen, so dass ich Erinnerungen für jedes Element auf der Liste festlegen kann.

Bitte überprüfen Sie die OnClickResponse() Methode, wo ich einen Alarm erstelle.

'public class Product extends AppCompatActivity implements View.OnClickListener { 
private List<list> myList = new ArrayList<list>(); 
private PendingIntent pendingIntent; 

private void fill_ListView() {

ArrayAdapter<list> listArrayAdapter = new myListAdapter();

ListView list = (ListView) findViewById(R.id.product_View);

list.setAdapter(listArrayAdapter); 
 
 } private void clickResponse() {

ListView l = (ListView) findViewById(R.id.product_View);

if(l!=null){

l.setOnItemClickListener(new AdapterView.OnItemClickListener() {
 
 @Override

public void onItemClick(AdapterView<?> parent, final View viewClicked,
 final int position, long id) {
 
 

AlertDialog.Builder alert = new AlertDialog.Builder(
 Product.this);

alert.setTitle("Reminder!!");

alert.setMessage("Do you want to be reminded of the expiry date of this product?”);

alert.setPositiveButton("YES", new DialogInterface.OnClickListener() {
 

@Override

public void onClick(DialogInterface dialog, int which) {
 
 Calendar calendar = Calendar.getInstance(); // checking if first item is clicked then a reminder will be set for some date

if(position==0){
 calendar.set(Calendar.MONTH, 6);

calendar.set(Calendar.YEAR, 2016);
 calendar.set(Calendar.DAY_OF_MONTH, 16);
 
 calendar.set(Calendar.HOUR_OF_DAY, 04);
 calendar.set(Calendar.MINUTE, 38);
 calendar.set(Calendar.SECOND, 0);
 calendar.set(Calendar.AM_PM,Calendar.AM);
 Intent myIntent = new Intent(Product.this, MyReceiver.class);
 pendingIntent = PendingIntent.getBroadcast(Product.this, 0,myIntent,0);
 
 AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
 alarmManager.set(AlarmManager.RTC, calendar.getTimeInMillis(), pendingIntent);
 
 } if(position==1){

calendar.set(Calendar.MONTH, 6);
 calendar.set(Calendar.YEAR, 2016);
 calendar.set(Calendar.DAY_OF_MONTH, 16);
 
 calendar.set(Calendar.HOUR_OF_DAY, 04);
 calendar.set(Calendar.MINUTE, 39);
 calendar.set(Calendar.SECOND, 40);
 calendar.set(Calendar.AM_PM,Calendar.AM);
 Intent myIntent = new Intent(Product.this, MyReceiver.class);
 pendingIntent = PendingIntent.getBroadcast(Product.this, 0,myIntent,0);
 
 AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
 alarmManager.set(AlarmManager.RTC, calendar.getTimeInMillis(), pendingIntent);
 
 }
 dialog.dismiss();
 }
 

});
 

alert.setNegativeButton("NO", new DialogInterface.OnClickListener() {
 @Override

public void onClick(DialogInterface dialog, int which) {
 
 dialog.dismiss();

}

});
 

alert.show();
 

}

});

}

}


private class myListAdapter extends ArrayAdapter<list> {

public myListAdapter() {

// what objects are going in there and how are they going to look
 super(Product.this, R.layout.custom_layout, myList);

}
 

@Override

public View getView(int position, View convertView, ViewGroup parent) {


View itemView = convertView;

if (itemView == null) {

itemView = getLayoutInflater().inflate(R.layout.custom_layout, parent, false);
 }
 list current_list = myList.get(position);
 
 
 ImageView imageView = (ImageView) itemView.findViewById(R.id.id_image);
 imageView.setImageResource(current_list.getIconId());
 

// getting the title of the event

TextView titleTxt = (TextView) itemView.findViewById(R.id.id_event);
 titleTxt.setText(current_list.getName());
 
 
 // getting the description
 //
TextView desp = (TextView) itemView.findViewById(R.id.id_desp);
 // desp.setText(current_list.getDetails());

EditText text = (EditText)itemView.findViewById(R.id.id_desp);
 text.setText(current_list.getDetails());
 
 
 TextView date = (TextView) itemView.findViewById(R.id.id_date);
 date.setText(current_list.getDate());
 

return itemView;

}
 
 

}
Code eingeben hier‘

Antwort

0

Das Problem liegt in dieser Zeile:

pendingIntent = PendingIntent.getBroadcast(Product.this, 0,myIntent,0); 

Der zweite Parameter steht für requestCode und hat für verschiedene Alarme eindeutig sein. Sie stellen es jedes Mal auf 0, wodurch der vorherige Alarm überschrieben wird.

+0

Ich habe den zweiten Parameter der zweiten if-Anweisung auf 1 geändert, aber jetzt funktioniert der erste einwandfrei, aber der zweite Alarm zeigt nicht einmal – timmy24565

+0

Sie müssen ihn für jeden Alarm eindeutig halten. –

+0

können Sie bitte mehr dazu erklären. Vielen Dank. Der erste erscheint und der zweite erscheint, aber nicht getrennt. Wenn der zweite Alarm ausgelöst wird, wird der erste noch überschrieben – timmy24565