0
我正在使用LazyList異步加載列表視圖中的圖像。 github的例子工作得很好,但是當我在應用程序中使用它時,只要我滾動,它就會大量滯後。Android LazyList-ListView滯後於滾動
這裏是我的代碼:
MainActivity:
public class MainActivity extends Activity {
public static List<EpisodeEntry> episodes;
public static ImageLoader imageLoader;
public ListView list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageLoader = new ImageLoader(this);
list = (ListView) findViewById(R.id.mainList);
}
@Override
public void onStart() {
super.onStart();
new GetXmlTask().execute();
}
private class GetXmlTask extends AsyncTask<Boolean, Void, List<String>> {
private List<EpisodeEntry> episodes = new ArrayList<EpisodeEntry>();
@Override
protected List<String> doInBackground(Boolean... booleans) {
//xml gets parsed into ArrayList episodes
}
@Override
protected void onPostExecute(List<String> xml) {
if (xml != null) {
ItemAdapter adapter = new ItemAdapter(getApplicationContext(), episodes);
list.setAdapter(adapter);
}
}
}
ItemAdapter: 公共類ItemAdapter擴展ArrayAdapter {
private final Context context;
private final List<EpisodeEntry> values;
public ItemAdapter(Context context, List<EpisodeEntry> values) {
super(context, R.layout.rowlayout, values);
this.context = context;
this.values = values;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = inflater.inflate(R.layout.rowlayout, parent, false);
ImageView pic = (ImageView) rowView.findViewById(R.id.list_image);
MainActivity.imageLoader.DisplayImage("...", seriesPic);
return rowView;
}
}
的FileCache,ImageLoader的和的MemoryCache類是完全一樣here 。
圖像(50)只有64x64,大小爲幾KB。爲什麼在我的應用程序中滾動而不是在示例應用程序中滯後?
謝謝,使用convertView解決了我的問題! 但是,爲什麼創建一個新的視圖這麼慢? –
對象分配總是過於防範,視圖也會經過不同的過程,如佈局和測量,並且根據佈局,這可以快速加起來 – ozzy91