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

Баг с items при прокручивании ListView - Программирование Android

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

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

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

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

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

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

Цвет 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,072
26.05.2015, 08:40 #3
Типичная проблема начинающих постигать ListView и адаптер. Помница я неделю бился с этой напастью. Короче надо все эти поля хранить и использовать в адаптере. Или ViewHolder использовать.
2
EgorDybovik
0 / 0 / 2
Регистрация: 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,072
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 / 2
Регистрация: 24.02.2013
Сообщений: 128
27.05.2015, 20:13  [ТС] #7
Цитата Сообщение от GukZiLLA Посмотреть сообщение
Вообще в вашем случае не надо юзать viewHolder или использовать два viewHolder'a для своей mesage_list
А что тогда использовать ?

Добавлено через 5 минут
Цитата Сообщение от Rube Посмотреть сообщение
Вот мой адаптер
Но у вас ведь тут не два layout для listview... для одного простого списка у меня тож все норм.
А вот что означает @Override ?? я все никак понять не могу, и для чего этот класс если он нигде не вызывается ?
0
Mikalai
262 / 238 / 95
Регистрация: 11.01.2015
Сообщений: 666
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 / 2
Регистрация: 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,072
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,072
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 / 2
Регистрация: 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 / 2
Регистрация: 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,072
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
Привет! Вот еще темы с решениями:

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

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

ListView и мультивыбор при открытии активити
Здравствуйте. Подскажите пожалуйста, можно ли при открытии активити со...

Скрывать Toolbar при пролистывании ListView
Подскажите как реализовать, когда листаешь ListView, что бы Toolbar исчезал?...


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

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

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