Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 即使在使用viewholder后,此listview也会滞后_Android_Listview_Custom Adapter_Android Viewholder - Fatal编程技术网

Android 即使在使用viewholder后,此listview也会滞后

Android 即使在使用viewholder后,此listview也会滞后,android,listview,custom-adapter,android-viewholder,Android,Listview,Custom Adapter,Android Viewholder,以下是customadapter文件的代码。我使用正则表达式来处理字符串。这是一个音乐播放器应用程序,此代码显示歌曲的名称和艺术家的名称,但滚动时会滞后 customAdapter.java import android.app.Activity; import android.media.MediaMetadataRetriever; import android.view.LayoutInflater; import android.view.View; i

以下是customadapter文件的代码。我使用正则表达式来处理字符串。这是一个音乐播放器应用程序,此代码显示歌曲的名称和艺术家的名称,但滚动时会滞后

customAdapter.java

 import android.app.Activity;
    import android.media.MediaMetadataRetriever;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ArrayAdapter;
    import android.widget.TextView;

    import java.util.List;

    public class customAdapter extends ArrayAdapter <String> {
    static class ViewHolder {
        TextView songName;
        TextView artistName;
        int position;
    }

    LayoutInflater inflater;

    public customAdapter(Activity context, List <String> songList) {
        super(context, 0, songList);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        String song = getItem(position);
        final ViewHolder holder;
        MediaMetadataRetriever metaRetriver = new MediaMetadataRetriever();

        if (convertView == null) {
            holder = new ViewHolder();
            convertView = LayoutInflater.from(getContext()).inflate(
                    R.layout.song, parent, false);
            holder.songName = (TextView) convertView.findViewById(R.id.list_item_song_name);
            holder.artistName = (TextView) convertView.findViewById(R.id.list_item_artist_name);
            convertView.setTag(holder);
        }

        else
            holder = (ViewHolder) convertView.getTag();

        try {

            metaRetriver.setDataSource(song);

            try {
                String[] temps = song.split("/");
                String temp = temps[temps.length - 1];
                temp = temp.replaceAll("\\s*\\([^\\)]*\\)\\s*", "");
                temp = temp.replaceAll("\\[.*?\\]", "");
                holder.songName.setText(temp.substring(0, temp.length() - 4));
            }

            catch (Exception e) {
                holder.songName.setText("Unknown");
            }

            try {
                String temp = metaRetriver.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST);
                temp = temp.replaceAll("\\s*\\([^\\)]*\\)\\s*", "");
                if(temp.equals(""))
                    holder.artistName.setText("Unknown");
                else
                    holder.artistName.setText(temp);
            }

            catch (Exception e) {
                holder.artistName.setText("Unknown");
            }
        }

        catch (Exception e) {

        }

        return convertView;
    }
   }
导入android.app.Activity;
导入android.media.MediaMetadataRetriever;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.ArrayAdapter;
导入android.widget.TextView;
导入java.util.List;
公共类customAdapter扩展了ArrayAdapter{
静态类视窗夹{
TextView歌曲名;
TextView艺人姓名;
内部位置;
}
充气机;
公共customAdapter(活动上下文、歌曲列表){
超级(上下文,0,歌曲列表);
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
String song=getItem(位置);
最终持票人;
MediaMetadataRetriever MetaRetriever=新的MediaMetadataRetriever();
if(convertView==null){
holder=新的ViewHolder();
convertView=LayoutFlater.from(getContext())。充气(
R.layout.song,父,假);
holder.songName=(TextView)convertView.findViewById(R.id.list\u item\u song\u name);
holder.artistName=(TextView)convertView.findViewById(R.id.list\u item\u artist\u name);
convertView.setTag(支架);
}
其他的
holder=(ViewHolder)convertView.getTag();
试一试{
metaRetriver.setDataSource(宋);
试一试{
String[]temps=song.split(“/”);
字符串temp=temps[temps.length-1];
temp=temp.replaceAll(“\\s*\\([^\\)]*\\)\\s*”,“”);
temp=temp.replaceAll(“\\[.\\]”,“”);
holder.songName.setText(临时子字符串(0,临时长度()-4));
}
捕获(例外e){
holder.songName.setText(“未知”);
}
试一试{
String temp=MetaRetriever.extractMetadata(MediaMetadataRetriever.METADATA\u KEY\u ARTIST);
temp=temp.replaceAll(“\\s*\\([^\\)]*\\)\\s*”,“”);
如果(温度等于(“”)
持有人.artistName.setText(“未知”);
其他的
持有者.artistName.setText(临时);
}
捕获(例外e){
持有人.artistName.setText(“未知”);
}
}
捕获(例外e){
}
返回视图;
}
}
请帮忙

String temp = metaRetriver.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST);
在每次
getView()
调用中,您都在主应用程序线程上执行IPC和磁盘I/O。不要这样做。在填充列表之前先获取此信息,或者异步加载它(毕加索和其他图像加载库异步加载
ImageView
行中使用的
ListView
图像的方式)

另外,在不记录异常的情况下不要捕获异常。在
catch(异常e)
块中添加
Log.e()
语句或其他内容

在每次
getView()
调用中,您都在主应用程序线程上执行IPC和磁盘I/O。不要这样做。在填充列表之前先获取此信息,或者异步加载它(毕加索和其他图像加载库异步加载
ImageView
行中使用的
ListView
图像的方式)


另外,在不记录异常的情况下不要捕获异常。在
catch(异常e)
块中添加
Log.e()?模拟器将运行得较慢另外,请粘贴在任何相关的调试器中,这是模拟器中的延迟还是手机上的延迟?模拟器将运行得较慢另外,请粘贴任何相关的调试器信息,谢谢回答!出于测试目的,我删除了这行代码,并用一个伪代码替换,但它仍然滞后。这似乎不是背后的原因。我现在该怎么办?@coderahul1994:从您的
getView()
方法中删除所有与
MediaMetadataRetriever
相关的内容。慢的部分可能是
setDataSource()
调用,而不是
extractMetadata()
调用。谢谢回答!出于测试目的,我删除了这行代码,并用一个伪代码替换,但它仍然滞后。这似乎不是背后的原因。我现在该怎么办?@coderahul1994:从您的
getView()
方法中删除所有与
MediaMetadataRetriever
相关的内容。慢的部分可能是
setDataSource()
调用,而不是
extractMetadata()
调用。