滚动时安装的App Listview滞后

时间:2012-08-03 11:42:48

标签: android listview

我正在通过应用程序图标和名称启动所有已安装应用程序列表的活动,它在滚动浏览应用程序时运行良好,非常滞后。任何让它顺利的想法?这是我的代码,谢谢。

public class AppListsActivity extends ListActivity{
    static final String TAG = "AppListsActivity";
    private Context self = this;
    public static boolean progressBarStatus = false;

    SharedPreferences.Editor editor;
    PackageManager pm;
    AppAdapter adapter = null;

    @Override
    public void onCreate(Bundle savedInstanceState) {       
        super.onCreate(savedInstanceState);
        setContentView(R.layout.apps_list);
        ListView lV = (ListView)findViewById(android.R.id.list);
        lV.setScrollingCacheEnabled(false);

        pm = getPackageManager();
        Intent main=new Intent(Intent.ACTION_MAIN, null); 
        main.addCategory(Intent.CATEGORY_LAUNCHER);

        List<ResolveInfo> launchables = pm.queryIntentActivities(main, 0);
        Collections.sort(launchables,new ResolveInfo.DisplayNameComparator(pm)); 

        adapter = new AppAdapter(pm, launchables);
        setListAdapter(adapter);

        progressBarStatus = true;
    }
    @Override
    protected void onListItemClick(ListView listView, View v, int position, long id) {
        //super.onListItemClick(l, v, position, id);

        ResolveInfo launchable = adapter.getItem(position);
        ActivityInfo activity = launchable.activityInfo;
        String selectionPname = activity.applicationInfo.packageName;
        String selection = activity.applicationInfo.loadLabel(pm).toString();
        Drawable selectionIcon = activity.applicationInfo.loadIcon(pm);

        editor = self.getSharedPreferences(WidgetConfigureActivity.PREFS_NAME, 0).edit();
        //switch (SettingsActivity.btnShortcutNo) {
        switch (WidgetConfigureActivity.btnShortcutNo) {
        case 1:
            //SettingsActivity.textTime.setText(selection);
            WidgetConfigureActivity.textTime.setText(selection);
            WidgetConfigureActivity.iconShortcutTime.setImageDrawable(selectionIcon);
            editor.putString("shortcutTimeWidget", selectionPname);         
            //editor.putString("shortcutTime", selection);
            editor.commit();
            MyWidgetProvider.mFisrtReboot = true;
            finish();
            break;
        default: 
            break;
        }       
    }
    private static class ViewHolder {
        public TextView label;
        public ImageView icon;
    }
    private class AppAdapter extends ArrayAdapter<ResolveInfo> {
        private PackageManager pm = null;
        Bitmap bmIcon;

        AppAdapter(PackageManager pm, List<ResolveInfo> apps) {
            super(AppListsActivity.this, R.layout.list_row, apps);
            this.pm = pm;
        }       
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View v = convertView;
            if (v==null) {
                v = newView(parent);
                ViewHolder viewHolder = new ViewHolder();
                viewHolder.label = (TextView) v.findViewById(R.id.label);
                viewHolder.icon = (ImageView) v.findViewById(R.id.icon);
                v.setTag(viewHolder);
            }
            ViewHolder holder = (ViewHolder) v.getTag();
            bmIcon = ((BitmapDrawable)getItem(position).loadIcon(pm)).getBitmap();
            bmIcon = Bitmap.createScaledBitmap(bmIcon, 5, 5, true);
            bindView(position, holder);       
            return(v);
        }       
        private View newView(ViewGroup parent) {
            return(getLayoutInflater().inflate(R.layout.list_row, parent, false));
        }       
        private void bindView(int position, ViewHolder holder) {                                 
            holder.label.setText(getItem(position).loadLabel(pm));              
            //holder.icon.setImageDrawable(getItem(position).loadIcon(pm));
            holder.icon.setImageBitmap(bmIcon);
        }
    }

0 个答案:

没有答案
相关问题