如何在Android中通过ArrayAdapter在ListView中单击单个ImageView后更改其背景?
我的片段活动中有一个ListView,它获取存储在内部存储器中的文件名。ListView还有一个ImageView,单击该视图时,会设置显示通知的警报。我希望单击时更改特定ImageView的背景。我的问题是,关闭应用程序后,ImageView的背景会恢复正常。那么,我应该如何更改已单击的每个ImageView的背景 这是我的片段类代码:如何在Android中通过ArrayAdapter在ListView中单击单个ImageView后更改其背景?,android,android-listview,imageview,android-arrayadapter,custom-arrayadapter,Android,Android Listview,Imageview,Android Arrayadapter,Custom Arrayadapter,我的片段活动中有一个ListView,它获取存储在内部存储器中的文件名。ListView还有一个ImageView,单击该视图时,会设置显示通知的警报。我希望单击时更改特定ImageView的背景。我的问题是,关闭应用程序后,ImageView的背景会恢复正常。那么,我应该如何更改已单击的每个ImageView的背景 这是我的片段类代码: ListView listView; CustomArrayAdapter arrayAdapter; ArrayList<String> Fil
ListView listView;
CustomArrayAdapter arrayAdapter;
ArrayList<String> FilesInFolder;
FilesInFolder = GetFiles(getActivity().getFilesDir());
arrayAdapter = new CustomArrayAdapter(FilesInFolder, getContext());
Collections.sort(FilesInFolder);
listView.setAdapter(arrayAdapter);
public class CustomArrayAdapter extends ArrayAdapter<String> {
private ArrayList<String> list;
Context mContext;
TimePickerDialog timePickerDialog;
DatePickerDialog datePickerDialog;
int currentHour, currentMinute, currentYear, currentMonth, currentDay, currentDate;
int setHour, setMinute, setYear, setMonth, setDay;
Calendar calendar;
AlarmManager alarmManager;
PendingIntent pendingIntent;
public static final String NOTIFICATION_CHANNEL_ID = "10001" ;
public static class ViewHolder {
TextView titleTextView;
ImageView imageView;
}
public CustomArrayAdapter(ArrayList<String> list, Context context){
super(context, R.layout.custom_listview, list);
this.list = list;
this.mContext = context;
calendar = Calendar.getInstance();
currentHour = calendar.get(Calendar.HOUR_OF_DAY);
currentMinute = calendar.get(Calendar.MINUTE);
currentYear = calendar.get(Calendar.YEAR);
currentMonth = calendar.get(Calendar.MONTH);
currentDay = calendar.get(Calendar.DAY_OF_MONTH);
currentDate = calendar.get(Calendar.DATE);
}
public View getView(int position, View convertView, ViewGroup parent){
String string = getItem(position);
ViewHolder viewHolder;
if (convertView == null){
viewHolder = new ViewHolder();
LayoutInflater inflater = LayoutInflater.from(getContext());
convertView = inflater.inflate(R.layout.custom_listview, parent, false);
viewHolder.imageView = convertView.findViewById(R.id.bellIcon);
viewHolder.titleTextView = convertView.findViewById(R.id.textView);
convertView.setTag(viewHolder);
viewHolder = (ViewHolder) convertView.getTag();
}
else {
viewHolder = (ViewHolder) convertView.getTag();
}
ViewHolder finalViewHolder = viewHolder;
viewHolder.imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (finalViewHolder.imageView.getTag() == "done") {
Snackbar.make(v, setHour + " " + setMinute + ", on" + " " + setDay + " " + setMonth + " " + setYear, Snackbar.LENGTH_LONG).show();
} else {
timePickerDialog = new TimePickerDialog(getContext(), new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker timePicker, final int hourOfDay, int minute) {
setHour = hourOfDay;
setMinute = minute;
datePickerDialog = new DatePickerDialog(getContext(), new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
setYear = year;
setMonth = month;
setDay = dayOfMonth;
Calendar setTime = Calendar.getInstance();
setTime.set(setYear, setMonth, setDay, setHour, setMinute, 0);
Date date = setTime.getTime();
scheduleNotification(string, date.getTime());
finalViewHolder.imageView.setImageResource(R.drawable.ic_baseline_notifications_active_24);
finalViewHolder.imageView.setTag("done");
Snackbar.make(v, "Reminder set for: " + string + "!", Snackbar.LENGTH_LONG)
.setAnimationMode(BaseTransientBottomBar.ANIMATION_MODE_SLIDE)
.show();
}
}, currentYear, currentMonth, currentDay);
datePickerDialog.show();
}
}, currentHour, currentMinute, false);
timePickerDialog.show();
}
}
});
viewHolder.titleTextView.setText(string);
return convertView;
}
public void scheduleNotification (String fileName , long delay) {
Intent notificationIntent = new Intent(this.mContext, MyBroadCastReceiver.class);
notificationIntent.putExtra(MyBroadCastReceiver.NOTIFICATION_ID, (int)System.currentTimeMillis());
notificationIntent.putExtra("title", fileName);
pendingIntent = PendingIntent.getBroadcast(getContext(), (int)System.currentTimeMillis(), notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
alarmManager = (AlarmManager) getContext().getSystemService(Context.ALARM_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
alarmManager.setAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, delay, pendingIntent);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
alarmManager.setExact(AlarmManager.RTC_WAKEUP, delay, pendingIntent);
} else {
alarmManager.set(AlarmManager.RTC_WAKEUP, delay, pendingIntent);
}
}
ListView-ListView;
CustomArrayAdapter arrayAdapter;
ArrayList文件信息文件夹;
fileinfolder=GetFiles(getActivity().getFilesDir());
arrayAdapter=newcustomarrayadapter(fileinfolder,getContext());
Collections.sort(fileinfolder);
setAdapter(arrayAdapter);
这是我的CustomArrayAdapter类:
ListView listView;
CustomArrayAdapter arrayAdapter;
ArrayList<String> FilesInFolder;
FilesInFolder = GetFiles(getActivity().getFilesDir());
arrayAdapter = new CustomArrayAdapter(FilesInFolder, getContext());
Collections.sort(FilesInFolder);
listView.setAdapter(arrayAdapter);
public class CustomArrayAdapter extends ArrayAdapter<String> {
private ArrayList<String> list;
Context mContext;
TimePickerDialog timePickerDialog;
DatePickerDialog datePickerDialog;
int currentHour, currentMinute, currentYear, currentMonth, currentDay, currentDate;
int setHour, setMinute, setYear, setMonth, setDay;
Calendar calendar;
AlarmManager alarmManager;
PendingIntent pendingIntent;
public static final String NOTIFICATION_CHANNEL_ID = "10001" ;
public static class ViewHolder {
TextView titleTextView;
ImageView imageView;
}
public CustomArrayAdapter(ArrayList<String> list, Context context){
super(context, R.layout.custom_listview, list);
this.list = list;
this.mContext = context;
calendar = Calendar.getInstance();
currentHour = calendar.get(Calendar.HOUR_OF_DAY);
currentMinute = calendar.get(Calendar.MINUTE);
currentYear = calendar.get(Calendar.YEAR);
currentMonth = calendar.get(Calendar.MONTH);
currentDay = calendar.get(Calendar.DAY_OF_MONTH);
currentDate = calendar.get(Calendar.DATE);
}
public View getView(int position, View convertView, ViewGroup parent){
String string = getItem(position);
ViewHolder viewHolder;
if (convertView == null){
viewHolder = new ViewHolder();
LayoutInflater inflater = LayoutInflater.from(getContext());
convertView = inflater.inflate(R.layout.custom_listview, parent, false);
viewHolder.imageView = convertView.findViewById(R.id.bellIcon);
viewHolder.titleTextView = convertView.findViewById(R.id.textView);
convertView.setTag(viewHolder);
viewHolder = (ViewHolder) convertView.getTag();
}
else {
viewHolder = (ViewHolder) convertView.getTag();
}
ViewHolder finalViewHolder = viewHolder;
viewHolder.imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (finalViewHolder.imageView.getTag() == "done") {
Snackbar.make(v, setHour + " " + setMinute + ", on" + " " + setDay + " " + setMonth + " " + setYear, Snackbar.LENGTH_LONG).show();
} else {
timePickerDialog = new TimePickerDialog(getContext(), new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker timePicker, final int hourOfDay, int minute) {
setHour = hourOfDay;
setMinute = minute;
datePickerDialog = new DatePickerDialog(getContext(), new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
setYear = year;
setMonth = month;
setDay = dayOfMonth;
Calendar setTime = Calendar.getInstance();
setTime.set(setYear, setMonth, setDay, setHour, setMinute, 0);
Date date = setTime.getTime();
scheduleNotification(string, date.getTime());
finalViewHolder.imageView.setImageResource(R.drawable.ic_baseline_notifications_active_24);
finalViewHolder.imageView.setTag("done");
Snackbar.make(v, "Reminder set for: " + string + "!", Snackbar.LENGTH_LONG)
.setAnimationMode(BaseTransientBottomBar.ANIMATION_MODE_SLIDE)
.show();
}
}, currentYear, currentMonth, currentDay);
datePickerDialog.show();
}
}, currentHour, currentMinute, false);
timePickerDialog.show();
}
}
});
viewHolder.titleTextView.setText(string);
return convertView;
}
public void scheduleNotification (String fileName , long delay) {
Intent notificationIntent = new Intent(this.mContext, MyBroadCastReceiver.class);
notificationIntent.putExtra(MyBroadCastReceiver.NOTIFICATION_ID, (int)System.currentTimeMillis());
notificationIntent.putExtra("title", fileName);
pendingIntent = PendingIntent.getBroadcast(getContext(), (int)System.currentTimeMillis(), notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
alarmManager = (AlarmManager) getContext().getSystemService(Context.ALARM_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
alarmManager.setAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, delay, pendingIntent);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
alarmManager.setExact(AlarmManager.RTC_WAKEUP, delay, pendingIntent);
} else {
alarmManager.set(AlarmManager.RTC_WAKEUP, delay, pendingIntent);
}
}
公共类CustomArrayAdapter扩展了ArrayAdapter{
私有数组列表;
语境;
TimePickerDialog TimePickerDialog;
DatePickerDialog DatePickerDialog;
int currentHour、currentMinute、currentYear、currentMonth、currentDay、currentDate;
int setHour、setMinute、setYear、setMonth、setDay;
日历;
AlarmManager AlarmManager;
下垂的下垂的;
公共静态最终字符串通知\u通道\u ID=“10001”;
公共静态类视图持有者{
text视图titleTextView;
图像视图图像视图;
}
公共CustomArrayAdapter(ArrayList列表,上下文){
super(context,R.layout.custom_listview,list);
this.list=列表;
this.mContext=上下文;
calendar=calendar.getInstance();
currentHour=calendar.get(calendar.HOUR,共天);
currentMinute=calendar.get(calendar.MINUTE);
currentYear=calendar.get(calendar.YEAR);
currentMonth=calendar.get(calendar.MONTH);
currentDay=calendar.get(calendar.DAY\u/u月);
currentDate=calendar.get(calendar.DATE);
}
公共视图getView(int位置、视图转换视图、视图组父视图){
String=getItem(位置);
持票人持票人;
if(convertView==null){
viewHolder=新的viewHolder();
LayoutInflater充气器=LayoutInflater.from(getContext());
convertView=充气机。充气(R.layout.custom_listview,父项,false);
viewHolder.imageView=convertView.findViewById(R.id.bellIcon);
viewHolder.titleTextView=convertView.findViewById(R.id.textView);
convertView.setTag(viewHolder);
viewHolder=(viewHolder)convertView.getTag();
}
否则{
viewHolder=(viewHolder)convertView.getTag();
}
ViewHolder finalViewHolder=ViewHolder;
viewHolder.imageView.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
if(finalViewHolder.imageView.getTag()=“完成”){
Snackbar.make(v,setHour+“”+setMinute+“”,on“+“”+setDay+“”+setMonth+“”+setYear,Snackbar.LENGTH_LONG)。show();
}否则{
timePickerDialog=new timePickerDialog(getContext(),new timePickerDialog.OnTimeSetListener()){
@凌驾
时间集上的公共void(时间选择器时间选择器,最终整数小时日,整数分钟){
设置小时=小时/天;
设置分钟=分钟;
datePickerDialog=new datePickerDialog(getContext(),new datePickerDialog.OnDateSetListener()){
@凌驾
public void onDateSet(日期选择器视图,整数年,整数月,整数天月){
setYear=年;
setMonth=月;
setDay=每月的第几天;
Calendar setTime=Calendar.getInstance();
设置时间(设置年、设置月、设置日、设置小时、设置分钟、0);
Date-Date=setTime.getTime();
scheduleNotification(字符串,date.getTime());
finalView.imageView.setImageResource(R.drawable.ic_基线_通知_活动_24);
finalViewHolder.imageView.setTag(“完成”);
Snackbar.make(v,“提醒设置为:“+字符串+”!”,Snackbar.LENGTH\u LONG)
.setAnimationMode(BaseTransientBottomBar.ANIMATION\u MODE\u幻灯片)
.show();
}
},当前年,当前月,当前日);
datePickerDialog.show();
}
},currentHour,currentMinute,false);
timePickerDialog.show();
}
}
});
viewHolder.titleTextView.setText(字符串);
返回视图;
}
公共无效计划通知(字符串文件名,长延迟){
Intent notificationIntent=新的Intent(this.mContext,MyBroadCastReceiver.class);
notificationIntent.putExtra(MyBroadCastReceiver.NOTIFICATION_ID,(int)System.currentTimeMillis());
notificationIntent.putExtra(“标题”,文件名);
PendingEvent=PendingEvent.getBroadcast(getContext(),(int)System.currentTimeMillis(),notificationIntent,PendingEvent.FLAG_UPDATE_CURRENT);
alarmManager=(alarmManager)getContext().getSystemService(Context.ALARM_服务);
if(Build.VERSION.SDK\u INT>=Build.VERSION\u code.M){
alarmManager.setAndAllowHileId(alarmManager.RTC_唤醒、延迟、挂起);
}else if(Build.VERSION.SDK\u INT>=Build.VERSION\u code.KITKAT){
alarmManager.setExact(alarmManager.RTC_唤醒、延迟、挂起);
}否则{
alarmManager.set(alarmManager