Java 列表视图加载速度更快
我使用的是ListView,但它的加载速度太慢,我需要它更快地加载,我不确定如何让适配器逐个加载每个ListView,这可能吗? 这是我的密码:Java 列表视图加载速度更快,java,android,listview,listadapter,Java,Android,Listview,Listadapter,我使用的是ListView,但它的加载速度太慢,我需要它更快地加载,我不确定如何让适配器逐个加载每个ListView,这可能吗? 这是我的密码: ArrayList<String> myTripOrigin = new ArrayList<>(); ArrayList<String> myTripDestiny = new ArrayList<>();
ArrayList<String> myTripOrigin = new ArrayList<>();
ArrayList<String> myTripDestiny = new ArrayList<>();
ArrayList<String> myTripHour = new ArrayList<>();
ArrayList <boolean[]> myTripSchedule = new ArrayList<>();
ArrayList<Boolean> myTripBools = new ArrayList<Boolean>();
for(int i = 0; i<response.body().size();i++)
{
myTripBools.add(response.body().get(i).isRol());
myTripOrigin.add(getAdress(new LatLng(Double.parseDouble(response.body().get(i).getOrigin_lat()),Double.parseDouble(response.body().get(i).getOrigin_lng()))));
myTripDestiny.add(getAdress(new LatLng(Double.parseDouble(response.body().get(i).getDestiny_lat()),Double.parseDouble(response.body().get(i).getDestiny_lng()))));
Date date = new Date((Long.parseLong(response.body().get(i).getArrival_time()))*1000L);
DateFormat format = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss aa");
format.setTimeZone(TimeZone.getDefault());
String formatted = format.format(date);
myTripHour.add(formatted);
}
//Send the array to constructor
ListAdapter userAdapter = new CustomAdapterRoute(getApplicationContext(), myTripOrigin,myTripDestiny,myTripHour,myTripSchedule,myTripBools);
ListView userListView = (ListView) findViewById(R.id.listViewRoute);
userListView.setAdapter(userAdapter);
}
ArrayList myTripOrigin=new ArrayList();
ArrayList myTripDestiny=新的ArrayList();
ArrayList myTripHour=新建ArrayList();
ArrayList myTripSchedule=新建ArrayList();
ArrayList myTripBools=新的ArrayList();
对于(int i=0;i正如我所想。您应该使用holder模式:使其更快,正如我所想。您应该使用holder模式:使其更快,在第一段代码中,您一直在调用response.body()
(为什么不将body放入变量并重用它?)
然后在适配器中,您没有重用convertView
:
View customView;
if(convertView == null) {
view = customInflater.inflate(R.layout.custom_row_route, parent, false);
} else {
customView = convertView;
}
此外,还可以将LayoutInflater
存储为适配器的实例变量
顺便说一句,自定义前缀是非常冗余的,因为您编写的所有代码都将根据定义进行自定义
另一个答案(来自@Gavriel)的平滑滚动链接也很重要。在第一段代码中,您一直在调用response.body()
(为什么不将body放入变量并重用它?)
然后在适配器中,您没有重用convertView
:
View customView;
if(convertView == null) {
view = customInflater.inflate(R.layout.custom_row_route, parent, false);
} else {
customView = convertView;
}
此外,还可以将LayoutInflater
存储为适配器的实例变量
顺便说一句,自定义前缀是非常冗余的,因为您编写的所有代码都将根据定义进行自定义
以及另一个答案的平滑滚动链接(来自@Gavriel)也很重要。您还没有包括代码中最重要的部分:CustomAdapter您是如何创建自定义适配器的?您是想纯粹提高现有程序的速度,还是寻求更好的实现方法?为什么不创建一个模型类,然后创建该模型类的数组,而不是使用多个数组。@Gavriel感谢您刚刚添加了CustomAdapterRout您还没有包括代码中最重要的部分:CustomAdapterRout您是如何创建自定义适配器的?您是想纯粹提高现有程序的速度,还是想用更好的方法实现?为什么不创建一个模型类,然后创建该模型类的数组而不是使用多个数组。@Gavriel感谢您刚刚添加了CustomAdapterRoute