나는리스트를 부 풀리는 List Adapter를 가지고있다. 방법 getView()
에서 나는 AscyncTask
을 만들어 인터넷에서 이미지를 얻습니다. 그러나, 나는 방법을 getView()
수많은 이유뿐만 아니라, 목록을 부풀리기 위해 호출 알아 냈어.안드로이드 - 목록을 부풀리기 위해 getView가 호출 될 때를 알아내는 방법
제 질문은 : 목록을 부풀리기 위해 메소드가 호출 된시기를 아는 방법은 무엇입니까? 메서드가 호출 될 때마다 AsyncTask
을 만들고 싶지 않습니다. getView()
뷰는 스크롤 과정에서 화면에 표시 할 때마다 호출됩니다
public class ListItem extends ArrayAdapter<Carro> {
private final Activity context;
private final List<Carro> carros;
public ListItem(Activity context, List<Carro> carros) {
super(context, R.layout.list_item, carros);
this.context = context;
this.carros = carros;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = context.getLayoutInflater();
View rowView = inflater.inflate(R.layout.list_item, null, true);
TextView modelo = (TextView) rowView.findViewById(R.id.modelo);
modelo.setText(carros.get(position).getModelo());
GetFoto getFoto = new GetFoto(rowView);
getFoto.execute(position);
return rowView;
}
private class GetFoto extends AsyncTask<Integer, Void, Void> {
Drawable fotoDraw;
View rowView;
int position;
public GetFoto(View view) {
this.rowView = view;
}
@Override
protected Void doInBackground(Integer... params) {
position = params[0];
HTTPHandler handler = new HTTPHandler();
fotoDraw = handler.makeServiceCallImage(carros.get(position).getFoto());
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
ImageView imagem = (ImageView) rowView.findViewById(R.id.imagem);
imagem.setImageDrawable(fotoDraw);
}
}
}
'목록을 부풀게하는 것'이 무슨 뜻인지 궁금합니다. 더 많은 이유 중 하나는 getView()가 호출되는 이유 중 하나만 알면 여러 가지 이유 중 몇 가지를 언급 할 수 있습니다. – greenapps
로드하려는 모든 그림에 대해 비동기 작업을 만들어야합니다. 그리고 getView()가 원할 때마다. 다운로드 한 사진을 캐시하지 않으면 위아래로 스크롤하면서 다시 다운로드해야합니다. – greenapps
예를 들어, 어댑터에 2 개의 항목이있는 List가있는 경우 getView() 메서드는 8 번 호출됩니다. 메서드가 호출 될 때마다 목록 자체에 8 개의 항목이 없더라도 asyncTask가 만들어집니다. 목록 항목이 행이 될 때만 AsyncTask를 호출하려고합니다. –