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

SimpleCursorAdapter(ListView заполняется данными только после прокрутки скрола)

20.03.2014, 11:57. Просмотров 1307. Ответов 4
Метки нет (Все метки)

Помогите решить задачу. У меня ListView начинает заполняться данными, только после первой прокрутки списка. Т.е в начальный момент список пустой.

Проблема скорее всего в блоке if/else:
Java
1
2
3
4
5
6
     if (inView == null) {
 
}else{
 
 
}


Вот мой адаптер:

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
public class MyDataAdapter extends SimpleCursorAdapter{
private Cursor cursor;
private Context context;
private ArrayList<String> list = new ArrayList<String>();
private ArrayList<Boolean> itemChecked = new ArrayList<Boolean>();
private LayoutInflater inflater;
private ViewHolder holder;
private String rowID;
// itemChecked will store the position of the checked items.
 
public MyDataAdapter(Context context, int layout, Cursor c, String[] from,
        int[] to) {
    super(context, layout, c, from, to);
    this.cursor = c;
    this.context = context;
 
    for (int i = 0; i < this.getCount(); i++) {
        itemChecked.add(i, false); // initializes all items value with false
    }
}
 
class ViewHolder {
 
    public CheckBox cBox;
}
 
public View getView(final int pos, View inView, ViewGroup parent) {
    if (inView == null) {
       inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        inView = inflater.inflate(R.layout.row_list_view, null);
        holder = new ViewHolder();
        holder.cBox = (CheckBox) inView.findViewById(R.id.chbox1); // your
 
        inView.setTag(holder);
    }else {
 
         holder = (ViewHolder) inView.getTag();
         bindView(inView, context, cursor);
 
    }
 
    // CheckBox
    holder.cBox.setOnClickListener(new OnClickListener() {
 
        public void onClick(View v) {
 
            CheckBox cb = (CheckBox) v.findViewById(R.id.chbox1);
 
            if (cb.isChecked()) {
                itemChecked.set(pos, true);
                Toast.makeText(context, "true", Toast.LENGTH_LONG).show();
                // do some operations here
            } else if (!cb.isChecked()) {
                itemChecked.set(pos, false);
                // do some operations here
                Toast.makeText(context, "false", Toast.LENGTH_LONG).show();
            }
        }
    });
    holder.cBox.setChecked(itemChecked.get(pos)); // this will Check or Uncheck the
 
    return inView;
}
 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.03.2014, 11:57
Ответы с готовыми решениями:

ListView, База данных и SimpleCursorAdapter - onItemClick срабатывает только после добавления данных
Здравствуйте! Подскажите, плиз, решение проблемы новичку... есть БД......

Прикрутить RadioGroup к ListView(SimpleCursorAdapter)
Не могу понять как реализовать одиночный выбор из списка: Сейчас выводит...

Вывод из базы данных в ListView через SimpleCursorAdapter
Доброе время суток. Пишу программу под Андроид в среде Android Studio и...

Переход на новое activity с элемента listView, заполненного через SimpleCursorAdapter
Здравствуйте! Помогите разобраться с такой проблемой: Есть список listView,...

Кастомизация индикатора прокрутки в ListView Android Studio
Здравствуйте, вообщем прописал нужные свойства для своего отображения прокрутки...

4
dubok79
324 / 122 / 10
Регистрация: 01.11.2012
Сообщений: 586
20.03.2014, 12:11 2
Может ЭТОТ пример закрепить в шапке? Посмотрите, вам все станет ясно.
1
Eserchik
0 / 0 / 0
Регистрация: 04.06.2012
Сообщений: 21
20.03.2014, 13:06  [ТС] 3
Из вашего примера я дополнил строчку:
Java
1
inView = inflater.inflate(R.layout.row_list_view, parent,false);
Но как только убираю блок ELSE
Т.е делаю так:
Java
1
2
3
4
5
6
  if (inView == null) {
 
  }
 
  holder = (ViewHolder) inView.getTag();
  bindView(inView, context, cursor);
И получаю ошибку:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Thread [<1> main] (Suspended (exception CursorIndexOutOfBoundsException))   
    <VM does not provide monitor information>   
    Choreographer.doCallbacks(int, long) line: 572  
    Choreographer.doFrame(long, int) line: 532  
    Choreographer$FrameDisplayEventReceiver.run() line: 735 
    Handler.handleCallback(Message) line: 730   
    Choreographer$FrameHandler(Handler).dispatchMessage(Message) line: 92   
    Looper.loop() line: 137 
    ActivityThread.main(String[]) line: 5103    
    Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]  
    Method.invoke(Object, Object...) line: 525  
    ZygoteInit$MethodAndArgsCaller.run() line: 737  
    ZygoteInit.main(String[]) line: 553 
    NativeStart.main(String[]) line: not available [native method]
0
dubok79
324 / 122 / 10
Регистрация: 01.11.2012
Сообщений: 586
20.03.2014, 22:06 4
Цитата Сообщение от Eserchik Посмотреть сообщение
exception CursorIndexOutOfBoundsException
Мне кажется у вас ошибка в запросе, а не в адаптере
0
Eserchik
0 / 0 / 0
Регистрация: 04.06.2012
Сообщений: 21
21.03.2014, 10:13  [ТС] 5
Все сам все решил, но спасибо за помощь.


Вот рабочий код:

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
    public View getView(final int pos, View inView, ViewGroup parent) {
    
        //Ставим курсор в текущюю позицию
        cursor.moveToPosition(pos);
        
        View v= inView;
        if (v == null) {
           inflater = (LayoutInflater) context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
           // inView = inflater.inflate(R.layout.row_list_view_wrong_verb, parent, false);
            v = LayoutInflater.from(context).inflate(R.layout.row_list_view_wrong_verb, null);
        holder = new ViewHolder();
            holder.cBox = (CheckBox) v.findViewById(R.id.chbox1); // your
            
            //Здесь нужно было привязать данные с курсора к TextView элементу
            holder.tvText1=(TextView)v.findViewById(R.id.name);
            holder.tvText1.setText(cursor.getString(cursor.getColumnIndex(DB.COLUMN_NAME)));
            
 
 
        
            
            v.setTag(holder);
      
           
        }else{
             
             holder = (ViewHolder) v.getTag();
             
             bindView(v, context, cursor);
           
        }
        
 
 
        
        
         
        // CheckBox
        holder.cBox.setOnClickListener(new OnClickListener() {
 
            
            public void onClick(View v) {
                DB db = new DB(context);
                db.open();
 
                CheckBox cb = (CheckBox) v.findViewById(R.id.chbox1);
               
                if (cb.isChecked()) {
                    itemChecked.set(pos, true);
               
 
                    
 
                 } else if (!cb.isChecked()) {
                    itemChecked.set(pos, false);
                  
                    
                }
            }
        });
        holder.cBox.setChecked(itemChecked.get(pos)); // this will Check or Uncheck the
        
        
        
 
 
        return v;
    }
0
21.03.2014, 10:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.03.2014, 10:13

ListView. После добавления кнопки перестал быть доступен сам ListView
Кастомизировал ListView с помощью нескольких TextView. Но после того, как...

Заполнение ListView данными из ArrayList
Привет! Помогите решить проблему. Есть класс в котором настроен ArrayList:...

Появление скрытого блока после определенной прокрутки скрола
jQuery(function(f){ var element = f('.hidden-header'); ...


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

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

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