Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
EgorDybovik
0 / 0 / 0
Регистрация: 24.02.2013
Сообщений: 128
#1

Баг с items при прокручивании ListView

25.05.2015, 22:15. Просмотров 1191. Ответов 38
Метки нет (Все метки)

Суть такая, что выводится список ListView. Там items могут быть двух разных видов(ну тоесть два немного разных Layout) в зависимости от данных которые выводятся. Когда все выводится то все хорошо, но если прокрутить в низ список так что бы пару пунктов списка спрятались то потом если прокрутить обратно то эти элементы могут поменять совй layout, на примем если в начале, в 1 элементе текст был с лева, а во втором с права, то потом они могут поменятся 1-текст с права, 2 - текст с лева (сам текст не меняется) .. Что это такое и как с этим боротся ?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.05.2015, 22:15
Ответы с готовыми решениями:

ListView ошибка при прокручивании
Читаю с json файла данные и добавляю их в ListView, первые 5 отображаются, а...

Непонятный баг в ListView
В общем, суть такова: Имеется список контактов в ListView. Каждый пункт...

После вызова notifydataset() items в listview "моргают"
столкнулся с такой проблемой, перерыл stackoverflow, ответа не нашел есть...

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

Как изменить цвет пункта ListView при нажатии на него и сохранять его цвет при проматывании списка?
Здравствуйте, подскажите, пожалуйста, как изменить цвет пункта ListView при...

38
CoolMind
421 / 404 / 65
Регистрация: 06.10.2012
Сообщений: 1,732
26.05.2015, 00:11 #2
EgorDybovik, я тоже одно время с такой фигнёй мучался. Переопределяете свой адаптер? Покажите код. Используете там ViewHolder?
2
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,074
26.05.2015, 08:40 #3
Типичная проблема начинающих постигать ListView и адаптер. Помница я неделю бился с этой напастью. Короче надо все эти поля хранить и использовать в адаптере. Или ViewHolder использовать.
2
EgorDybovik
0 / 0 / 0
Регистрация: 24.02.2013
Сообщений: 128
26.05.2015, 16:38  [ТС] #4
Не использовал ViewHolder; попробовал использовать, вроде по отношению где какой должен быть теперь нормально, но теперь сами элементы путаются между собой и повтаряются некоторые при прокручивании ))) Это вообще весло )
Вот код, то что закоментировано было раньше до того как я сделал через ViewHolder
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
public View getView(int position, View convertView, ViewGroup parent) {
        mesageTemplate mesageTempl = null; 
        final MesageModel mesagemodel = objects.get(position);
        ViewHolder viewholder;
        if (convertView == null) {
 
            //LayoutInflater inflater = context.getLayoutInflater(); //mesagemodel.getVov().equals("0")
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
            if(mesagemodel.getVov().compareTo("1")==0){
                convertView = inflater.inflate(R.layout.friend_mesage_list, parent, false);
            } else {
                convertView = inflater.inflate(R.layout.my_mesage_list, parent, false);
            }
            
            viewholder = new ViewHolder();
            
            //TextView textMesage = (TextView) convertView.findViewById(R.id.textMesage);
            viewholder.mesageTExt = (TextView) convertView.findViewById(R.id.textMesage);
 
            //mesageTempl = new mesageTemplate(textMesage);
            viewholder.mesageTExt.setText(mesagemodel.getTextMesage());
            //convertView.setTag(mesageTempl);
            convertView.setTag(viewholder);
 
        } else {
            //mesageTempl = (mesageTemplate) convertView.getTag();
            viewholder = (ViewHolder) convertView.getTag();
        }
 
        
        //chatViewTemplate.setFio(chatModel.getFullName());
        //mesageTempl.setTextMesage(mesagemodel.getTextMesage());
 
        convertView.setOnClickListener(new OnClickListener() {
 
            @Override
            public void onClick(View v) {
                Toast.makeText(getContext(),mesagemodel.getVov() , Toast.LENGTH_SHORT).show();
                //Toast.makeText(getContext(),chatModel.getFriendId() , Toast.LENGTH_SHORT).show();
                //chatModel.getFriendId();
                //((Activity) context).startActivity(new Intent((((Activity) context)), MesageList.class));
            }
        });
 
        return convertView;
    }
Добавлено через 11 минут
Java
1
2
3
static class ViewHolder{
        public TextView mesageTExt;
    }
0
GukZiLLA
35 / 35 / 2
Регистрация: 30.11.2013
Сообщений: 102
26.05.2015, 17:48 #5
EgorDybovik, viewHolder переиспользует вьюхи и поэтому на новых item данные могут показываться из старых.

Чтобы такого не было, вынесите за пределы if вот это:
viewholder.mesageTExt.setText(mesagemodel.getTextMesage());

Чтобы каждый раз вбивалось заново

Добавлено через 2 минуты
EgorDybovik, Вообще в вашем случае не надо юзать viewHolder или использовать два viewHolder'a для своей mesage_list
1
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,074
26.05.2015, 21:32 #6
Вот мой адаптер
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class ViewHolder {
    TextView text;
    int column1;
}
 
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
    return inflater.inflate(R.layout.fragment_item, parent, false);
}
 
@Override
public void bindView(View view, Context context, Cursor cursor) {
    super.bindView(view, context, cursor);
    final long id = getItemId(cursor.getPosition());
    ViewHolder holder = (ViewHolder) view.getTag();
    if (holder == null) {
        holder = new ViewHolder();
        holder.text = (TextView) view.findViewById(R.id.text);
        view.setTag(holder);
    }
    holder.text.setText(cursor.getString(holder.column1));
...
1
EgorDybovik
0 / 0 / 0
Регистрация: 24.02.2013
Сообщений: 128
27.05.2015, 20:13  [ТС] #7
Цитата Сообщение от GukZiLLA Посмотреть сообщение
Вообще в вашем случае не надо юзать viewHolder или использовать два viewHolder'a для своей mesage_list
А что тогда использовать ?

Добавлено через 5 минут
Цитата Сообщение от Rube Посмотреть сообщение
Вот мой адаптер
Но у вас ведь тут не два layout для listview... для одного простого списка у меня тож все норм.
А вот что означает @Override ?? я все никак понять не могу, и для чего этот класс если он нигде не вызывается ?
0
Mikalai
264 / 240 / 95
Регистрация: 11.01.2015
Сообщений: 670
27.05.2015, 20:49 #8
Аннотация @Override информирует компилятор о том, что метод перегружает метод в суперклассе.

Попробовал написать адаптер с использованием 2х itemView. Но тут не знаю как переиспользовать старые view-элементы. Наверное такой вариант ресурсозатратен, но по крайней мере работает.

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
public class ListAdapter extends BaseAdapter {
 
    Context context;
    LayoutInflater lInflater;
    int[] numbers;
 
    public ListAdapter(Context context, int[] numbers) {
        this.context = context;
        this.numbers = numbers;
        this.lInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }
 
    @Override
    public int getCount() {
        return numbers.length;
    }
 
    @Override
    public Object getItem(int position) {
        return numbers[position];
    }
 
    @Override
    public long getItemId(int position) {
        return position;
    }
 
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view;
        int element = (Integer) getItem(position);
        if(element % 2 == 0) {
            view = lInflater.inflate(R.layout.item1, parent, false);
        } else {
            view = lInflater.inflate(R.layout.item2, parent, false);
        }
        ((TextView) view.findViewById(R.id.textView)).setText("" + element);
 
        return view;
    }
}
И ещё попытался использовать ViewHolder. Попинайте код если не сложно.

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
public class ListAdapterWithViewHolder extends BaseAdapter {
 
    Context context;
    LayoutInflater lInflater;
    int[] numbers;
 
    public ListAdapterWithViewHolder(Context context, int[] numbers) {
        this.context = context;
        this.numbers = numbers;
        this.lInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }
 
    @Override
    public int getCount() {
        return numbers.length;
    }
 
    @Override
    public Object getItem(int position) {
        return numbers[position];
    }
 
    @Override
    public long getItemId(int position) {
        return position;
    }
 
    static class ViewHolder {
        TextView holderTextView1;
        TextView holderTextView2;
    }
 
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
 
        View view;
        int element = (Integer) getItem(position);
        if(element % 2 == 0) {
            view = lInflater.inflate(R.layout.item11, parent, false);
            ViewHolder viewHolder = getHolder(view);
            if(viewHolder.holderTextView1 == null) {
                viewHolder.holderTextView1 = (TextView) view.findViewById(R.id.textView11);
            }
            viewHolder.holderTextView1.setText("" + element);
        } else {
            view = lInflater.inflate(R.layout.item22, parent, false);
            ViewHolder viewHolder = getHolder(view);
            if(viewHolder.holderTextView2 == null) {
                viewHolder.holderTextView2 = (TextView) view.findViewById(R.id.textView22);
            }
            viewHolder.holderTextView2.setText("" + element);
        }
        return view;
    }
 
    private ViewHolder getHolder(View view) {
        ViewHolder viewHolder = (ViewHolder) view.getTag();
        if(viewHolder == null) {
            viewHolder = new ViewHolder();
            view.setTag(viewHolder);
        }
        return viewHolder;
    }
}
0
EgorDybovik
0 / 0 / 0
Регистрация: 24.02.2013
Сообщений: 128
27.05.2015, 21:08  [ТС] #9
Цитата Сообщение от Rube Посмотреть сообщение
Вот мой адаптер
Но у вас ведь тут не два layout для listview... для одного простого списка у меня тож все норм.
А вот что означает @Override ?? я все никак понять не могу, и для чего этот класс если он нигде не вызывается ?
Цитата Сообщение от GukZiLLA Посмотреть сообщение
Чтобы такого не было, вынесите за пределы if вот это:
viewholder.mesageTExt.setText(mesagemodel.getTextMesage());
Не помогло (((

Добавлено через 10 минут
По сути я понимаю почему так просиходит, ведь из за перерысовки item при скроле, но как это исправить я не понимаю ... уже 5 дней мучаюсь ... Могу скинуть весь код с адаптером и моделью, может кто подскажет что изменить ?
0
CoolMind
421 / 404 / 65
Регистрация: 06.10.2012
Сообщений: 1,732
27.05.2015, 21:46 #10
EgorDybovik, да, выложите, а то я в потоке вашего и чужого кода уже запутался, что где и почему.
1
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,074
27.05.2015, 22:00 #11
Java
1
final MesageModel mesagemodel = objects.get(position);
Вот это надо в конструкторе, а не в getView.
1
CoolMind
421 / 404 / 65
Регистрация: 06.10.2012
Сообщений: 1,732
27.05.2015, 22:02 #12
EgorDybovik, не рассматривали вариант, что виноваты не контролы, а некоторые функции, написанные вами?
Это что за проверка?
Java
1
if(mesagemodel.getVov().compareTo("1")==0){
Здесь правильно выводит?
Java
1
mesagemodel.getTextMesage()
Вот мой вариант:
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
public class CustomAdapter extends BaseAdapter {
    private ArrayList<Item> items;
    private int layout;
    private LayoutInflater inflater;
 
    public CustomAdapter(Context context, int layout, ArrayList<Item> items) {
        super();
        this.items = items;
        this.layout = layout;
        inflater = LayoutInflater.from(context);
    }
 
    @Override
    public int getCount() {
        return items == null ? 0 : items.size();
    }
 
    @Override
    public Item getItem(int position) {
        return items == null ? null : items.get(position);
    }
 
    @Override
    public long getItemId(int position) {
        return position;
    }
 
    public View getView(int position, View convertView, ViewGroup parent) {
        final ViewHolder viewHolder;
 
        if (convertView == null) {
            convertView = inflater.inflate(layout, null);
 
            viewHolder = new ViewHolder();
            viewHolder.tvTitle = (TextView) convertView.findViewById(R.id.tvTitle);
            viewHolder.tvDescription = (TextView) convertView.findViewById(R.id.tvDescription);
            viewHolder.tvDate = (TextView) convertView.findViewById(R.id.tvDate);
            convertView.setTag(viewHolder);
        } else
            viewHolder = (ViewHolder) convertView.getTag();
 
        final Item data = items.get(position);
        viewHolder.tvTitle.setText(data.title);
        viewHolder.tvDescription.setText(data.description);
        viewHolder.tvDate.setText(data.date);
 
        return convertView;
    }
 
    private static class ViewHolder {
        private TextView tvTitle;
        private TextView tvDescription;
        private TextView tvDate;
    }
}
Добавлено через 2 минуты
Цитата Сообщение от Rube Посмотреть сообщение
final MesageModel mesagemodel = objects.get(position);
Вот это надо в конструкторе, а не в getView.
У меня тоже так. Можно переделать (через функцию getItem), можно и так оставить.
0
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,074
28.05.2015, 07:24 #13
Хотя да, надо в getView, т.к. тут два итема в одном листвью.
CoolMind, а где я не вижу 2 итема разных в коде нету же?
0
CoolMind
421 / 404 / 65
Регистрация: 06.10.2012
Сообщений: 1,732
28.05.2015, 09:34 #14
Rube, да, я брал из своего проекта пример, не переделывал под ТС.
0
Armagedo
209 / 209 / 60
Регистрация: 22.08.2014
Сообщений: 644
28.05.2015, 11:56 #15
EgorDybovik, ты подумай сам.
У тебя два лэйаута и ты их тасуешь.
Адаптер без малейшего, что он там подсовывает листвью - с тем лэйаутом или нет - это твоя забота.

Т.е. тебе нужна еще одна проверка, к какому типу относится подсовываемый адаптером convertview и нужно/можно ли его использовать в данный момент или нужно инфлэйтить новый.

Для этого тебе нужен еще один флаг, который всунь в viewHolder и по которому потом делай проверку, что за чухню тебе подсунул адаптер

Java
1
2
3
4
static class ViewHolder{
        public TextView mesageTExt;
        public int viewLayoutType;
    }
Ферштейн?
0
EgorDybovik
0 / 0 / 0
Регистрация: 24.02.2013
Сообщений: 128
29.05.2015, 19:13  [ТС] #16
Вообще ничего не помогло, все одно и тоже ))
Кину последний вариант кода ...
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
package adapters;
 
import java.util.List;
 
import com.example.wall_call.R;
 
import viewTemplate.mesageTemplate;
 
 
import model.MesageModel;
import android.app.Activity;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.TextView;
import android.widget.Toast;
 
public class MesageAdapter extends ArrayAdapter<MesageModel> {
    private List<MesageModel> objects;
    private Activity context;
    public MesageAdapter(Activity context, List<MesageModel> objects) {
        super(context, R.layout.mesager_layout, objects);
        this.objects = objects;
        this.context = context;
    }
    
    @Override
    public int getCount() {
        return objects.size();
    }
    @Override
    public MesageModel getItem(int position) {
        return objects.get(position);
    }
    
    @Override
    public long getItemId(int position) {
        return position;
    }
    
    @Override
    public int getViewTypeCount() {
        return 2;
    }
    
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        
        final MesageModel mesagemodel = objects.get(position);
        final ViewHolder holder;
        
        if (convertView == null) {
            holder = new ViewHolder();
            holder.viewType = mesagemodel.getVov();
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
        
            if(holder.viewType.compareTo("1")==0){
                convertView = inflater.inflate(R.layout.my_mesage_list, parent, false);
            } else {
                convertView = inflater.inflate(R.layout.friend_mesage_list, parent, false);
            }
            
        
            holder.textMesage = (TextView) convertView.findViewById(R.id.textMesage);
            holder.timeText = (TextView) convertView.findViewById(R.id.viewTime);
            convertView.setTag(holder);
 
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        
        holder.textMesage.setText(mesagemodel.getTextMesage());
        holder.timeText.setText("time");
 
        convertView.setOnClickListener(new OnClickListener() {
 
            @Override
            public void onClick(View v) {
                Toast.makeText(getContext(),mesagemodel.getVov() , Toast.LENGTH_SHORT).show();
                //Toast.makeText(getContext(),chatModel.getFriendId() , Toast.LENGTH_SHORT).show();
                //chatModel.getFriendId();
                //((Activity) context).startActivity(new Intent((((Activity) context)), MesageList.class));
            }
        });
 
        return convertView;
    }
    
    private static class ViewHolder{
        private TextView textMesage;
        private TextView timeText;
        private String viewType;
    }
 
}
Добавлено через 1 минуту
Цитата Сообщение от CoolMind Посмотреть сообщение
Это что за проверка?
Код Java(TM) 2 Platform Standard Edition 5.0
1
if(mesagemodel.getVov().compareTo("1")==0){
в модели лежит значение "vov" по которому определяется какой layout подстовлять (1 || 0)

Добавлено через 7 минут
Armagedo, это тоже не сработало (
0
Armagedo
209 / 209 / 60
Регистрация: 22.08.2014
Сообщений: 644
29.05.2015, 19:14 #17
Так, а где ты проверяешь какой тебе convertview подсовывает адаптер и подходит ли он тебе?

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
@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        
        final MesageModel mesagemodel = objects.get(position);
        final ViewHolder holder;
        
        if (convertView == null) {
            holder = new ViewHolder();
            holder.viewType = mesagemodel.getVov();
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
        
            if(holder.viewType.compareTo("1")==0){
                convertView = inflater.inflate(R.layout.my_mesage_list, parent, false);
            } else {
                convertView = inflater.inflate(R.layout.friend_mesage_list, parent, false);
            }
            
        
            holder.textMesage = (TextView) convertView.findViewById(R.id.textMesage);
            holder.timeText = (TextView) convertView.findViewById(R.id.viewTime);
            convertView.setTag(holder);
 
        } else {
            holder = (ViewHolder) convertView.getTag();
            if(holder.viewType.compareTo(mesagemodel.getVov())!=0){
              if(holder.viewType.compareTo("1")==0)
                   convertView = inflater.inflate(R.layout.my_mesage_list, parent, false);
                       else 
                           convertView = inflater.inflate(R.layout.friend_mesage_list, parent, false);
            }
        }
        
        holder.textMesage.setText(mesagemodel.getTextMesage());
        holder.timeText.setText("time");
 
        convertView.setOnClickListener(new OnClickListener() {
 
            @Override
            public void onClick(View v) {
                Toast.makeText(getContext(),mesagemodel.getVov() , Toast.LENGTH_SHORT).show();
                //Toast.makeText(getContext(),chatModel.getFriendId() , Toast.LENGTH_SHORT).show();
                //chatModel.getFriendId();
                //((Activity) context).startActivity(new Intent((((Activity) context)), MesageList.class));
            }
        });
 
        return convertView;
    }
0
EgorDybovik
0 / 0 / 0
Регистрация: 24.02.2013
Сообщений: 128
29.05.2015, 19:38  [ТС] #18
Armagedo, Ошибку выкидывает .....
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
05-29 15:36:10.291: E/AndroidRuntime(3197): FATAL EXCEPTION: main
05-29 15:36:10.291: E/AndroidRuntime(3197): java.lang.NullPointerException
05-29 15:36:10.291: E/AndroidRuntime(3197):     at adapters.MesageAdapter$ViewHolder.access$2(MesageAdapter.java:111)
05-29 15:36:10.291: E/AndroidRuntime(3197):     at adapters.MesageAdapter.getView(MesageAdapter.java:81)
05-29 15:36:10.291: E/AndroidRuntime(3197):     at android.widget.AbsListView.obtainView(AbsListView.java:2143)
05-29 15:36:10.291: E/AndroidRuntime(3197):     at android.widget.ListView.measureHeightOfChildren(ListView.java:1246)
05-29 15:36:10.291: E/AndroidRuntime(3197):     at android.widget.ListView.onMeasure(ListView.java:1158)
05-29 15:36:10.291: E/AndroidRuntime(3197):     at android.view.View.measure(View.java:15518)
05-29 15:36:10.291: E/AndroidRuntime(3197):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4825)
05-29 15:36:10.291: E/AndroidRuntime(3197):     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)
05-29 15:36:10.291: E/AndroidRuntime(3197):     at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
05-29 15:36:10.291: E/AndroidRuntime(3197):     at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
05-29 15:36:10.291: E/AndroidRuntime(3197):     at android.view.View.measure(View.java:15518)
05-29 15:36:10.291: E/AndroidRuntime(3197):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4825)
05-29 15:36:10.291: E/AndroidRuntime(3197):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
05-29 15:36:10.291: E/AndroidRuntime(3197):     at android.view.View.measure(View.java:15518)
05-29 15:36:10.291: E/AndroidRuntime(3197):     at android.widget.LinearLayout.measureVertical(LinearLayout.java:847)
05-29 15:36:10.291: E/AndroidRuntime(3197):     at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
05-29 15:36:10.291: E/AndroidRuntime(3197):     at android.view.View.measure(View.java:15518)
05-29 15:36:10.291: E/AndroidRuntime(3197):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4825)
05-29 15:36:10.291: E/AndroidRuntime(3197):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
05-29 15:36:10.291: E/AndroidRuntime(3197):     at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2176)
05-29 15:36:10.291: E/AndroidRuntime(3197):     at android.view.View.measure(View.java:15518)
05-29 15:36:10.291: E/AndroidRuntime(3197):     at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1874)
05-29 15:36:10.291: E/AndroidRuntime(3197):     at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1089)
05-29 15:36:10.291: E/AndroidRuntime(3197):     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1265)
05-29 15:36:10.291: E/AndroidRuntime(3197):     at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:989)
05-29 15:36:10.291: E/AndroidRuntime(3197):     at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4351)
05-29 15:36:10.291: E/AndroidRuntime(3197):     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)
05-29 15:36:10.291: E/AndroidRuntime(3197):     at android.view.Choreographer.doCallbacks(Choreographer.java:562)
05-29 15:36:10.291: E/AndroidRuntime(3197):     at android.view.Choreographer.doFrame(Choreographer.java:532)
05-29 15:36:10.291: E/AndroidRuntime(3197):     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)
05-29 15:36:10.291: E/AndroidRuntime(3197):     at android.os.Handler.handleCallback(Handler.java:725)
05-29 15:36:10.291: E/AndroidRuntime(3197):     at android.os.Handler.dispatchMessage(Handler.java:92)
05-29 15:36:10.291: E/AndroidRuntime(3197):     at android.os.Looper.loop(Looper.java:137)
05-29 15:36:10.291: E/AndroidRuntime(3197):     at android.app.ActivityThread.main(ActivityThread.java:5041)
05-29 15:36:10.291: E/AndroidRuntime(3197):     at java.lang.reflect.Method.invokeNative(Native Method)
05-29 15:36:10.291: E/AndroidRuntime(3197):     at java.lang.reflect.Method.invoke(Method.java:511)
05-29 15:36:10.291: E/AndroidRuntime(3197):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
05-29 15:36:10.291: E/AndroidRuntime(3197):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
05-29 15:36:10.291: E/AndroidRuntime(3197):     at dalvik.system.NativeStart.main(Native Method)
0
Armagedo
209 / 209 / 60
Регистрация: 22.08.2014
Сообщений: 644
29.05.2015, 19:44 #19
Естественно, LayoutInflater inflater не инициализирован же ж...

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
@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        
        final MesageModel mesagemodel = objects.get(position);
        final ViewHolder holder;
        
        if (convertView == null) {
            holder = new ViewHolder();
            holder.viewType = mesagemodel.getVov();
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
        
            if(holder.viewType.compareTo("1")==0){
                convertView = inflater.inflate(R.layout.my_mesage_list, parent, false);
            } else {
                convertView = inflater.inflate(R.layout.friend_mesage_list, parent, false);
            }
            
        
            holder.textMesage = (TextView) convertView.findViewById(R.id.textMesage);
            holder.timeText = (TextView) convertView.findViewById(R.id.viewTime);
            convertView.setTag(holder);
 
        } else {
            holder = (ViewHolder) convertView.getTag();
            if(holder.viewType.compareTo(mesagemodel.getVov())!=0){
              LayoutInflater inflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE); 
              if(holder.viewType.compareTo("1")==0)
                   convertView = inflater.inflate(R.layout.my_mesage_list, parent, false);
                       else 
                           convertView = inflater.inflate(R.layout.friend_mesage_list, parent, false);
            }
        }
        
        holder.textMesage.setText(mesagemodel.getTextMesage());
        holder.timeText.setText("time");
 
        convertView.setOnClickListener(new OnClickListener() {
 
            @Override
            public void onClick(View v) {
                Toast.makeText(getContext(),mesagemodel.getVov() , Toast.LENGTH_SHORT).show();
                //Toast.makeText(getContext(),chatModel.getFriendId() , Toast.LENGTH_SHORT).show();
                //chatModel.getFriendId();
                //((Activity) context).startActivity(new Intent((((Activity) context)), MesageList.class));
            }
        });
 
        return convertView;
    }
0
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,074
29.05.2015, 19:48 #20
Я не знаю, но всегда было "Context context"
Java
1
Activity context
Чего там в 81 строке?

Добавлено через 2 минуты
Armagedo,
Java
1
2
3
4
5
if (convertView == null) {
   LayoutInflater inflater = ...
} else {
   LayoutInflater inflater = ...
}
Так можно чтоли?
0
29.05.2015, 19:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.05.2015, 19:48

Цвет ListView при скролинге
Добрый день. Есть ListView с белым фоном, на время скролинга фон становиться...

NullPointerException при поиске ListView
Здравствуйте! Есть список (ListView), заполненный данными, есть строка поиска...

Ошибка при выборе Item в ListView
Здравствуйте уважаемые форумчане. Не могу определить где ошибся. У меня есть...


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

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

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