如何在Android中通过ArrayAdapter在ListView中单击单个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还有一个ImageView,单击该视图时,会设置显示通知的警报。我希望单击时更改特定ImageView的背景。我的问题是,关闭应用程序后,ImageView的背景会恢复正常。那么,我应该如何更改已单击的每个ImageView的背景

这是我的片段类代码:

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