一个LinearLayout的布局(api 19),一个ListView,通过按钮往里面添加值,但是重复.求解决办法,
AlarmView.java:
布局文件:
AlarmView.java:
import android.app.AlarmManager;
import android.app.AlertDialog;
import android.app.PendingIntent;
import android.app.TimePickerDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.util.AttributeSet;
import android.view.View;
import android.widget.*;
//import com.jikexueyuan.xlclock.app.AlarmReceiver;//忽略这个类.
import com.jikexueyuan.xlclock.app.R;
import java.util.Calendar;
public class AlarmView extends LinearLayout {
public AlarmView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
/*public AlarmView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}*/
public AlarmView(Context context) {
super(context);
init();
}
private void init() {
alarmManager = (AlarmManager) getContext().getSystemService(Context.ALARM_SERVICE);
}
@Override
protected void onFinishInflate() {
super.onFinishInflate();
btnAddAlarm = (Button) findViewById(R.id.btnAddAlarm);
lvAlarmList = (ListView) findViewById(R.id.lvAlarmList);
adapter = new ArrayAdapter<AlarmData>(getContext(), android.R.layout.simple_list_item_1);
lvAlarmList.setAdapter(adapter);
readSavedAlarm();
btnAddAlarm.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
addAlarm();
}
});
lvAlarmList.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, final int position, long id) {
new AlertDialog.Builder(getContext()).setTitle("操作选项")
.setItems(new CharSequence[]{"刪除"}, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case 0:
//刪除.
deleteAlarm(position);
break;
}
}
}).setNegativeButton("取消", null).show();
return true;
}
});
}
private void deleteAlarm(int position) {
AlarmData ad = adapter.getItem(position);
adapter.remove(ad);
saveAlarmList();
}
private void addAlarm() {
Calendar c = Calendar.getInstance();
new TimePickerDialog(getContext(), new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
calendar.set(Calendar.MINUTE, minute);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
Calendar currentTime = Calendar.getInstance();
if (calendar.getTimeInMillis() <= currentTime.getTimeInMillis()) {
calendar.setTimeInMillis(calendar.getTimeInMillis() + 24 * 60 * 60 * 1000);
}
AlarmData ad = new AlarmData(calendar.getTimeInMillis());
adapter.add(ad);
/*alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,ad.getTime(), 3 * 60 * 1000, PendingIntent.getBroadcast(getContext(), ad.getId(), new Intent(getContext(), AlarmReceiver.class), 0));*/
saveAlarmList();
}
}, c.get(Calendar.HOUR_OF_DAY), c.get(Calendar.MINUTE), true).show();
}
private void saveAlarmList() {
SharedPreferences.Editor et = getContext().getSharedPreferences(
AlarmView.class.getName(), Context.MODE_PRIVATE
).edit();
StringBuffer sur = new StringBuffer();
for (int i = 0; i < adapter.getCount(); i++) {
sur.append(adapter.getItem(i).getTime()).append(",");
}
if (sur.length() > 1) {
String content = sur.substring(0, sur.length() - 1);
et.putString(KEY_ALARM_LIST, content);
} else {
et.putString(KEY_ALARM_LIST, null);
}
et.commit();
}
private void readSavedAlarm() {
SharedPreferences sp = getContext().getSharedPreferences(
AlarmView.class.getName(), Context.MODE_PRIVATE
);
String content = sp.getString(KEY_ALARM_LIST, null);
if (content != null) {
String[] timeStrings = content.split(",");
for (String str : timeStrings) {
adapter.add(new AlarmData(Long.parseLong(str)));
}
}
}
private Button btnAddAlarm;
private ListView lvAlarmList;
private static final String KEY_ALARM_LIST = "alarmlist";
private ArrayAdapter<AlarmData> adapter=null;
private AlarmManager alarmManager;
private static class AlarmData {
public AlarmData(long time) {
this.time = time;
date = Calendar.getInstance();
date.setTimeInMillis(time);
timeLabel = String.format("%d-%d %d:%d",
date.get(Calendar.MONTH) + 1,
date.get(Calendar.DAY_OF_MONTH),
date.get(Calendar.HOUR_OF_DAY),
date.get(Calendar.MINUTE));
}
private long time = 0;
private String timeLabel = "";
private Calendar date;
@Override
public String toString() {
return getTimeLabel();
}
public long getTime() {
return time;
}
public String getTimeLabel() {
return timeLabel;
}
public int getId() {
return (int) (getTime() / 1000 / 60);
}
}
}
布局文件:
<com.jikexueyuan.xlclock.app.view.AlarmView
android:id="@+id/tabAlarm"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<ListView
android:id="@+id/lvAlarmList"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1"
/>
<Button
android:id="@+id/btnAddAlarm"
android:text="@string/AddAlarm"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
</com.jikexueyuan.xlclock.app.view.AlarmView>