我在我的应用程序中使用列表视图。我制作了一个自定义适配器并使用了 viewholder 设计模式。问题是当我通过平滑滑动它的滚动来滚动列表视图但是当我通过拖动快速滚动拇指滚动它时它滞后太多。它经常冻结一段时间。我已经检查了手机中的其他应用程序,例如默认音乐播放器,无论我如何滚动,列表视图都像风一样滚动。我没有在列表中使用任何图像视图,每行只使用三个文本视图。
这是完整的代码:
public class CustomListViewSongs extends BaseAdapter{
private Context context;
private ArrayList songs, artist, songduration;
private static LayoutInflater inflater = null;
public CustomListViewSongs(Context context, ArrayList songs, ArrayList artist, ArrayList songDuration){
this.context = context;
this.songs = songs;
this.artist = artist;
this.songduration = songDuration;
}
@Override
public int getCount() {
return songs.size();
}
@Override
public Object getItem(int position) {
return songs.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
Holder holder;
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = convertView;
if(rowView == null){
rowView = inflater.inflate(R.layout.customlistviewsongssinglerow, null);
holder = new Holder();
holder.songTitle = (TextView) rowView.findViewById(R.id.songTitle);
holder.songTitleArtist = (TextView) rowView.findViewById(R.id.songTitleArtist);
holder.songDuration = (TextView) rowView.findViewById(R.id.songDuration);
rowView.setTag(holder);
}else{
holder = (Holder) rowView.getTag();
}
holder.songTitle.setText("" + songs.get(position));
holder.songTitleArtist.setText("" + artist.get(position));
long duration = Long.parseLong("" + songduration.get(position));
int seconds = (int) ((duration / 1000) % 60);
long minutes = ((duration - seconds) / 1000) / 60;
if (seconds < 10) {
holder.songDuration.setText("" + minutes + ":0" + seconds);
} else {
holder.songDuration.setText("" + minutes + ":" + seconds);
}
return rowView;
}
public class Holder {
TextView songTitle, songTitleArtist, songDuration;
int position;
}
}
和列表视图 xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView
android:fastScrollEnabled="true"
android:fastScrollAlwaysVisible="false"
android:background="@android:color/transparent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/listView"/>
</RelativeLayout>
并称它为:
public class f1 extends Fragment {
private MainActivity f = new MainActivity();
private ListView lv;
private View view;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
view = inflater.inflate(R.layout.f1, container, false);
populate();
return view;
}
private void populate() {
lv = (ListView) view.findViewById(R.id.listView);
lv.setAdapter(new CustomListViewSongs(getActivity(), f.songs, f.artist, f.songsDuration));
}
}