Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
ersin
1 / 1 / 0
Регистрация: 14.02.2013
Сообщений: 130
#1

Как оптимизировать ListviewAdapter чтобы не было разрывов при скроллинге - Android

07.04.2016, 17:18. Просмотров 196. Ответов 5
Метки нет (Все метки)

Есть адаптер из него не удалось сделать плавный скроллин .

Мой ListviewAdapter
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
public class ListViewAdapter extends BaseAdapter {
    
    
    static class ViewHolder {
        TextView theme;
        TextView contacts;
        TextView price;
        ImageView photo;
        TextView discription;
        TextView status;
 
    }
    ViewHolder holder;
    // Declare Variables
    Context context;
    LayoutInflater inflater;
    ArrayList<HashMap<String, String>> data;
    ImageLoader imageLoader;
    HashMap<String, String> resultp = new HashMap<String, String>();
 
    public ListViewAdapter(Context context,
            ArrayList<HashMap<String, String>> arraylist) {
        this.context = context;
        data = arraylist;
        imageLoader = new ImageLoader(context);
    }
 
    @Override
    public int getCount() {
        return data.size();
    }
 
    @Override
    public Object getItem(int position) {
        return null;
    }
 
    @Override
    public long getItemId(int position) {
        return 0;
    }
 
    public View getView(final int position, View convertView, ViewGroup parent) {
        // Declare Variables
        View v = convertView;
        if (v == null) {
        holder = new ViewHolder();
            
        inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
 
        View itemView = inflater.inflate(R.layout.listview_item, parent, false);
        // Get the position
        resultp = data.get(position);
 
        // Locate the TextViews in listview_item.xml
        holder.theme = (TextView) itemView.findViewById(R.id.theme);
        holder.contacts = (TextView) itemView.findViewById(R.id.contacts);
        holder.price = (TextView) itemView.findViewById(R.id.price);
        holder. discription = (TextView) itemView.findViewById(R.id.discription);
        // Locate the ImageView in listview_item.xml
        holder.photo = (ImageView) itemView.findViewById(R.id.photo);
        
        holder.status = (TextView) itemView.findViewById(R.id.status);
        v.setTag(holder);
        } else {
            holder = (ViewHolder) v.getTag();
        }
 
        // Capture position and set results to the TextViews
        holder.theme.setText(resultp.get(Uslugi.THEME));
        holder.contacts.setText(resultp.get(Uslugi.CONTACTS));
        holder.price.setText(resultp.get(Uslugi.PRICE));
        
        holder.status.setText(resultp.get(Uslugi.STATUS));
        // Capture position and set results to the ImageView
        // Passes flag images URL into ImageLoader.class
        imageLoader.DisplayImage(resultp.get(Uslugi.PHOTO), holder.photo);
        return v;
        // Capture ListView item click
        
        
        itemView.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View arg0) {
                
                // Get the position
                resultp = data.get(position);
                Intent intent = new Intent(context, SingleItemView.class);
                // Pass all data rank
                intent.putExtra("theme", resultp.get(Uslugi.THEME));
                // Pass all data country
                intent.putExtra("contacts", resultp.get(Uslugi.CONTACTS));
                // Pass all data population
                intent.putExtra("price",resultp.get(Uslugi.PRICE));
                // Pass all data flag
                intent.putExtra("photo", resultp.get(Uslugi.PHOTO));
                // Start SingleItemView Class
                intent.putExtra("discription", resultp.get(Uslugi.DISCRIPTION));
                context.startActivity(intent);
 
            }
        });
        return itemView;
        
        
        
    }
}


А это пример по которому нужно модифицировать вышеуказанное

Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
       public View getView(int position, View convertView, ViewGroup parent) {
                Wallpaper wallpaper = (Wallpaper) getItem(position);
                ViewHolder holder;
                if(convertView == null){
                        LayoutInflater inflater = LayoutInflater.from(mContext);
                        convertView = inflater.inflate(R.layout.list_item, parent, false);
                        holder = new ViewHolder();
                        holder.titleText =(TextView) convertView.findViewById(R.id.title_text);
                        holder.previewImage = (ImageView) convertView.findViewById(R.id.image_view);
                        convertView.setTag(holder);
                }
                else{
                        holder = (ViewHolder)convertView.getTag();
                }
 
               
                /*
                 * Don't bother changing the image and loading a new
                 * one of we are re-using the view in the same spot.
                 */
                if(position != holder.position){
                        holder.previewImage.setImageDrawable(mTempImage);
                        holder.titleText.setText(wallpaper.getTitle());
                        holder.position = position;
                       
                        mLoader.loadImage(holder, wallpaper);
                }
               
               
                if(position > getCount() - THRESHOLD){
                        mLoadTrigger.loadTriggered();
                }
               
                return convertView;
        }


Все попытки переделать мой адаптер закончились неудачей.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.04.2016, 17:18     Как оптимизировать ListviewAdapter чтобы не было разрывов при скроллинге
Посмотрите здесь:

Android Как сделать, чтобы приложение запускалось только при налиции WiFi соединения?
Как оптимизировать приложение? Android
Загрузка данных при скроллинге Android
Android Сбрасываются надписи на контролах при скроллинге ListView
Android Как узнать, что приложение было запущено при помощи NFC метки?
Android Android: как оптимизировать код для ExpandableListView
Как сделать так, чтобы при повороте устройства экран оставался вертикальным? Android
PagerAdapter, как сделать, чтобы у каждого итема было свое название и свой вид? Android
Android Как добавить андройд-проект в Eclips с Андройдом чтобы после его можно было запустить на виртуальной машине?
Android Как сделать, чтобы при копировании сохранялся перенос строк?
Как сделать, чтобы определенный layout включался при определенном языке? Android
Android Как в андроид сделать чтобы navigation drawer при запуске был открыт

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
petruchodd
07.04.2016, 18:50
  #2

Не по теме:

что за разрывы? я чет не понял

ersin
1 / 1 / 0
Регистрация: 14.02.2013
Сообщений: 130
07.04.2016, 21:17  [ТС]     Как оптимизировать ListviewAdapter чтобы не было разрывов при скроллинге #3
Ну виснет программа от объема данных, листвью листать невозможно просто !
Паблито
2236 / 1809 / 563
Регистрация: 12.05.2014
Сообщений: 6,448
Завершенные тесты: 1
08.04.2016, 14:30     Как оптимизировать ListviewAdapter чтобы не было разрывов при скроллинге #4
все эти findViewById должны быть по идее в холдере, никак не в getView
а в getView поля холдера уже должны запоняться информацией из модели
это первое, что бросилось в глаза
petruchodd
90 / 90 / 8
Регистрация: 23.06.2009
Сообщений: 511
08.04.2016, 19:30     Как оптимизировать ListviewAdapter чтобы не было разрывов при скроллинге #5
скорей всего виснет из-за того, что картинки большого обьема . Уменьшай картинки когда всовываешь их в листвью тогда лагать не будет.

Примерно так :
Java
1
2
3
4
5
public Bitmap thumbnail(Bitmap mBitmap){
        Matrix matrix = new Matrix();
        mBitmap = Bitmap.createScaledBitmap(mBitmap,  mBitmap.getWidth()/10, mBitmap.getHeight()/10, true);
        return mBitmap;
    }
в примере на 10 уменьшено. Качество при просмотре в листвью не теряется. Если нужно открывать картинки отдельно в оригинальном размере - то просто храни битмапы отдельно.
Мне кажется проблема в этом.
ersin
1 / 1 / 0
Регистрация: 14.02.2013
Сообщений: 130
08.04.2016, 21:14  [ТС]     Как оптимизировать ListviewAdapter чтобы не было разрывов при скроллинге #6
Проблема решена! В списке более 120 строк с картинками. Работает плавно.

Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
public View getView(final int position, View convertView, ViewGroup parent) {
        // Declare Variables
        inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
         View itemView=convertView;
            if(convertView==null)
                itemView = inflater.inflate(R.layout.listview_item,  parent, false);
 
        
        
    
 
        //View itemView = inflater.inflate(R.layout.listview_item, parent, false);
        // Get the position
        resultp = data.get(position);
 
        // Locate the TextViews in listview_item.xml
        theme = (TextView) itemView.findViewById(R.id.theme);
        contacts = (TextView) itemView.findViewById(R.id.contacts);
        price = (TextView) itemView.findViewById(R.id.price);
        discription = (TextView) itemView.findViewById(R.id.discription);
        // Locate the ImageView in listview_item.xml
        photo = (ImageView) itemView.findViewById(R.id.photo);
 
        
        status = (TextView) itemView.findViewById(R.id.status);
 
        // Capture position and set results to the TextViews
        theme.setText(resultp.get(Uslugi.THEME));
        contacts.setText(resultp.get(Uslugi.CONTACTS));
        price.setText(resultp.get(Uslugi.PRICE));
        
        status.setText(resultp.get(Uslugi.STATUS));
        // Capture position and set results to the ImageView
        // Passes flag images URL into ImageLoader.class
        imageLoader.DisplayImage(resultp.get(Uslugi.PHOTO), photo);
        
        // Capture ListView item click
        
        
        itemView.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View arg0) {
                
                // Get the position
                resultp = data.get(position);
                Intent intent = new Intent(context, MainActivity.class);
                // Pass all data rank
                intent.putExtra("theme", resultp.get(Uslugi.THEME));
                // Pass all data country
                 
                    intent.putExtra("stickyView", resultp.get(Uslugi.THEME).toString());
                    
                    intent.putExtra("heroImageView", resultp.get(Uslugi.PHOTO).toString());
                    
                
                intent.putExtra("contacts", resultp.get(Uslugi.CONTACTS));
                // Pass all data population
                intent.putExtra("price",resultp.get(Uslugi.PRICE));
                // Pass all data flag
                
                intent.putExtra("photo", resultp.get(Uslugi.PHOTO));
                
                
                // Start SingleItemView Class
                intent.putExtra("discription", resultp.get(Uslugi.DISCRIPTION));
                context.startActivity(intent);
 
            }
        });
        return itemView;
        
        
        
    }
}
Yandex
Объявления
08.04.2016, 21:14     Как оптимизировать ListviewAdapter чтобы не было разрывов при скроллинге
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru