Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
ersin
1 / 1 / 1
Регистрация: 14.02.2013
Сообщений: 130
#1

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

07.04.2016, 17:18. Просмотров 234. Ответов 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;
        }


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

ListView: сбивается содержимое ImageView элемента при скроллинге + как сделать выделение пункта списка при нажатии?
1. Есть свой класс ContactsSimpleCursorAdapter, в методе public void...

Загрузка данных при скроллинге
Как реализовать загрузку данных при прокрутке ScrollView, в момент когда список...

PagerAdapter, как сделать, чтобы у каждого итема было свое название и свой вид?
В этом новичек. Подскажите. class SamplePagerAdapter extends PagerAdapter { ...

Как сделать, чтобы при скроллинге страницы менялась прозрачность фона блока?
Наверху страницы фиксированное меню, где названия разделов сайта: &lt;div...

Нужно оптимизировать готовый код, чтобы не было стыдно показать
Мне дали сделать задачку, чтобы проверить мои знания в ООП (я только 2 месяца...

как сделать, чтобы при нажатии на кнопку появлялась таблица, заданная мною, чтобы в полях таблицы можно было ввести информацию а потом сохранить ее
Здравствуйте! Подскажите, вот у меня есть веб-страница и код в ней. Если...

5
petruchodd
07.04.2016, 18:50
  #2

Не по теме:

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

0
ersin
1 / 1 / 1
Регистрация: 14.02.2013
Сообщений: 130
07.04.2016, 21:17  [ТС] #3
Ну виснет программа от объема данных, листвью листать невозможно просто !
0
Pablito
2652 / 2134 / 726
Регистрация: 12.05.2014
Сообщений: 7,448
Завершенные тесты: 1
08.04.2016, 14:30 #4
все эти findViewById должны быть по идее в холдере, никак не в getView
а в getView поля холдера уже должны запоняться информацией из модели
это первое, что бросилось в глаза
1
petruchodd
125 / 122 / 18
Регистрация: 23.06.2009
Сообщений: 654
08.04.2016, 19:30 #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 уменьшено. Качество при просмотре в листвью не теряется. Если нужно открывать картинки отдельно в оригинальном размере - то просто храни битмапы отдельно.
Мне кажется проблема в этом.
1
ersin
1 / 1 / 1
Регистрация: 14.02.2013
Сообщений: 130
08.04.2016, 21:14  [ТС] #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;
        
        
        
    }
}
0
08.04.2016, 21:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.04.2016, 21:14
Привет! Вот еще темы с решениями:

Нужно чтобы div, появляющийся по hover'u, появлялся при скроллинге
Всем доброго времени суток, помогите советом плз. Есть полупрозрачные...

Как запустить исполнение алгоритма чтобы при компиляции не было ошибок?
Как запустить в исполнение алгоритма на C#, в microsoft visual studio 2013,...

Как сделать чтобы при создании формул их было полностью видно?
подскажите как сделать чтобы при создании формул их было полностью видно

Как сделать так, чтобы при запуске программы её не было видно?
Как сделать так, чтобы при запуске программы её не было видно? А именно...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

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