我如何平滑listView滚动?

时间:2014-02-18 10:30:19

标签: android android-listview

我正在使用Media extractor API编写媒体播放器应用程序。所以我的解码器解码数据并在表面上显示内容。这工作正常。我有一个列表视图。当我滚动这个列表视图时,它显示对解码器线程的影响。所以我受到了一些干扰。我该如何解决这个问题。有没有办法在单独的线程上运行我的listView适配器(getView()方法)? 我看到了这个链接。它可能对我没有帮助。 http://developer.android.com/training/improving-layouts/smooth-scrolling.html因为我的列表项只包含一个textView。

@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        TextView txt_Effects;
        ImageView proImage;
        if(convertView == null){
            LayoutInflater inflater= (LayoutInflater)context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
            convertView= inflater.inflate(R.layout.row_listview, null);
            txt_Effects= (TextView)convertView.findViewById(R.id.txt_row);
            proImage= (ImageView)convertView.findViewById(R.id.proImage_row);
        }
        else{
            txt_Effects= (TextView)convertView.findViewById(R.id.txt_row);
            proImage= (ImageView)convertView.findViewById(R.id.proImage_row);
        }

        txt_Effects.setText(data[position]);
        txt_Effects.setTextColor(Color.WHITE);
        proImage.setVisibility(View.GONE);

        if(position == previousSelectionIndex){
            txt_Effects.setTextColor(Color.MAGENTA);
            prevSelectedTextView= txt_Effects;
        }

        if(position>= startProIndex && position <= endProIndex){
            proImage.setVisibility(View.VISIBLE);
        }



        return convertView;
    }

2 个答案:

答案 0 :(得分:2)

您应该在getView()方法之外执行所有“重”操作。考虑使用AsyncTask或ThreadPool进行“解码”,然后在UI线程中更新ListView。

答案 1 :(得分:2)

您可能希望使用 ViewHolder 模式来提高加载列表项的效果。请参阅以下内容:

Android ViewHolder Pattern Example

Holder Pattern

希望它有所帮助。