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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Eserchik
0 / 0 / 0
Регистрация: 04.06.2012
Сообщений: 21
#1

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

20.03.2014, 11:57. Просмотров 1099. Ответов 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;
}
 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.03.2014, 11:57     SimpleCursorAdapter(ListView заполняется данными только после прокрутки скрола)
Посмотрите здесь:

Прикрутить RadioGroup к ListView(SimpleCursorAdapter) Android
Получение данных с SimpleCursorAdapter Android
Android Position в ListView после addTextChangedListener
Android ViewPager, Fragment и SimpleCursorAdapter, обновить соседнюю страницу
Переход на новое activity с элемента listView, заполненного через SimpleCursorAdapter Android
Android Загрузка ListView после AsyncTask
Вывод из базы данных в ListView через SimpleCursorAdapter Android
Android Каков новый аналог устаревшего SimpleCursorAdapter?
Android Обновление ListView после добавления записи
Android Как вывести в ListView, только если тело SMS содержит определенный текст?
SimpleCursorAdapter Android
Android Сохранение файлов с данными после удаления

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dubok79
323 / 121 / 11
Регистрация: 01.11.2012
Сообщений: 586
20.03.2014, 12:11     SimpleCursorAdapter(ListView заполняется данными только после прокрутки скрола) #2
Может ЭТОТ пример закрепить в шапке? Посмотрите, вам все станет ясно.
Eserchik
0 / 0 / 0
Регистрация: 04.06.2012
Сообщений: 21
20.03.2014, 13:06  [ТС]     SimpleCursorAdapter(ListView заполняется данными только после прокрутки скрола) #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]
dubok79
323 / 121 / 11
Регистрация: 01.11.2012
Сообщений: 586
20.03.2014, 22:06     SimpleCursorAdapter(ListView заполняется данными только после прокрутки скрола) #4
Цитата Сообщение от Eserchik Посмотреть сообщение
exception CursorIndexOutOfBoundsException
Мне кажется у вас ошибка в запросе, а не в адаптере
Eserchik
0 / 0 / 0
Регистрация: 04.06.2012
Сообщений: 21
21.03.2014, 10:13  [ТС]     SimpleCursorAdapter(ListView заполняется данными только после прокрутки скрола) #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;
    }
Yandex
Объявления
21.03.2014, 10:13     SimpleCursorAdapter(ListView заполняется данными только после прокрутки скрола)
Ответ Создать тему
Опции темы

Текущее время: 01:45. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru