Я реализовал ArrayAdapter для ListView
, где каждая строка содержит TextView
и ImageButton
.Фоновое изображение ImageButton зависит от некоторых условий, доступны две опции:
public View getView(int position, View convertView, ViewGroup parent) {
View vi=convertView;
if(convertView==null)
vi = inflater.inflate(R.layout.item_with_button, null);
File f = new File(PATH_TO_FILE);
if(f.exists()){
imbutton =(ImageButton)vi.findViewById(R.id.btn_image);
imbutton.setBackgroundResource(R.drawable.done);
}else
{
imbutton =(ImageButton)vi.findViewById(R.id.btn_image);
imbutton.setBackgroundResource(R.drawable.download);
imbutton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
String url = URL;
new DownloadFileAsync(pos).execute(url);
}
});
}
...
return vi;
}
Если файл существует, тогда я устанавливаю готовое изображение в ImageButton.Если файл не существует, я устанавливаю «загрузить» изображение.
После того, как пользователь нажимает ImageButton
, файл загружается, и мне нужно изменить соответствующее изображение.Проблема в том, что getView
вызывается, только если пользователь прокручивает ListView
вниз до тех пор, пока ImageButton
не исчезнет с экрана, а затем прокрутится назад.После этого появляется кнопка с новым фоновым изображением.
Однако в настоящее время я не могу сделать недействительной кнопку для отображения нового изображения.
Я использовал этот класс для асинхронной загрузки: http://www.java -samples.com / showtutorial.php? tutorialid = 1521
Я попытался сделать что-то вроде currentbutton.invalidate()
в функции
@Override
protected void onPostExecute(String unused) {
activity.dismissDialog(DIALOG_DOWNLOAD_PROGRESS);
}
, но безуспешно.
Как сделать недействительными ImageButton
дляпоказать новое фоновое изображение?