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

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

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

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

07.04.2016, 17:18. Просмотров 203. Ответов 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
Как реализовать загрузку данных при прокрутке ScrollView, в момент когда список в прокрутке подходит к концу? (например как это реализовано...

PagerAdapter, как сделать, чтобы у каждого итема было свое название и свой вид? - Программирование Android
В этом новичек. Подскажите. class SamplePagerAdapter extends PagerAdapter { @Override public int getCount() { ...

Сбрасываются надписи на контролах при скроллинге ListView - Программирование Android
Всем привет. Ребята, у меня есть ListView с контролами. Один из контрлов Button. Когда я нажимаю на Button, то изменяется надпись на...

Как добавить андройд-проект в Eclips с Андройдом чтобы после его можно было запустить на виртуальной машине? - Программирование Android
Вот у меня с интернета скачан готовый андрой-проект, но я не знаю как его добавить в остальные проекты чтобы запустить на виртуальной...

Как узнать, что приложение было запущено при помощи NFC метки? - Программирование Android
Добрый день, у меня такой вопрос. Как узнать что приложение было запущено при помощи NFC метки?

Как оптимизировать приложение? - Программирование Android
При загрузке apk-файла в google play выдает ошибку==&gt;Архив APK-файла не оптимизирован. Запустите инструмент оптимизации, а затем повторите...

Как сделать, чтобы при копировании сохранялся перенос строк? - Программирование Android
Нужно, чтобы при копировании пользователем текста в текстовое поле сохранялся перенос строк.

Как сделать, чтобы определенный layout включался при определенном языке? - Программирование Android
К примеру у меня приложение на 3 языках. Как сделать чтобы когда я включал русский язык, показывался другой layout вместо изначально? ...

Android: как оптимизировать код для ExpandableListView - Программирование Android
как заполнить ExpandableListView при помощи строкового массива ? Имеется ввиду из готовой StringArray как на картинке вот...

Как сделать так, чтобы при повороте устройства экран оставался вертикальным? - Программирование Android
Как сделать так, чтобы при повороте устройства экран оставался вертикальным? (Не смеяться, только начинаю) :)

Как в андроид сделать чтобы navigation drawer при запуске был открыт - Программирование Android
Помогите!

Как сделать, чтобы приложение запускалось только при налиции WiFi соединения? - Программирование Android
У меня есть web-приложение для Android (phonegap), проблема в том, что если скорость интернета низкая (ниже чем 5 - 7 Мб/с) приложение...


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

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

Не по теме:

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

ersin
1 / 1 / 0
Регистрация: 14.02.2013
Сообщений: 130
07.04.2016, 21:17  [ТС]     Как оптимизировать ListviewAdapter чтобы не было разрывов при скроллинге #3
Ну виснет программа от объема данных, листвью листать невозможно просто !
Pablito
2455 / 1900 / 591
Регистрация: 12.05.2014
Сообщений: 6,702
Завершенные тесты: 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