Я реализовал ArrayAdapter для ListView
, где каждая строка содержит TextView
и ImageButton
. Фоновое изображение ImageButton зависит от некоторых условий, возможны два варианта:Android: измените фон 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
для отображения его нового фонового изображения?
Brilliant, thanks –