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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.64
Lers
13 / 13 / 3
Регистрация: 27.05.2012
Сообщений: 203
#1

Чтение данных из бд в listview - Программирование Android

13.08.2014, 23:23. Просмотров 1563. Ответов 7
Метки нет (Все метки)

Здесь listview с контекстным меню. В меню 2 пункта. По клику на пункт, запись из listview'a должна добавляться в определенную таблицу.
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
package info.androidhive.tabsswipe;
 
import java.util.ArrayList;
 
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
 
public class MoviesFragment extends Fragment {
    
ListView lw1;
ArrayAdapter <String> adapter;
ArrayList <String> label = new ArrayList <String>();
DataBase sqh;
SQLiteDatabase sqdb;
Cursor cursor;
ContentValues cv;
public static String s1 = new String();
public static final int IDM_A = 101;
public static final int IDM_B = 102;
@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        
        View rootView = inflater.inflate(R.layout.fragment_movies, container, false);
        lw1 = (ListView) rootView.findViewById(R.id.listrdy);
                
        sqh = new DataBase(getActivity().getApplicationContext());
        sqdb = sqh.getWritableDatabase();
        
            
            
            
            
        registerForContextMenu(lw1);
        
        return rootView;
    }
    
    @Override
    public void onCreateContextMenu(ContextMenu menu, View v,
            ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        menu.add(Menu.NONE, IDM_A, Menu.NONE, "WIN");
        menu.add(Menu.NONE, IDM_B, Menu.NONE, "LOSE");
    }
    
 
    public boolean onContextItemSelected(MenuItem item) {
        lw1.setOnItemClickListener(new OnItemClickListener() {
              public void onItemClick(AdapterView<?> parent, View view,
                  int position, long id) {
                  
                   s1 = lw1.getItemAtPosition(position).toString();    
        
              }
            });
        switch (item.getItemId()) {
        case IDM_A:
            Toast.makeText(getActivity(), "Добавлено в раздел Выполнено", Toast.LENGTH_LONG)
                    .show();
            cv = new ContentValues();
            cv.put(DataBase.WIN, s1);
              sqdb.insert(DataBase.TABLE_NAME3, DataBase.WIN, cv);
            
            return true;
            
        case IDM_B:
            Toast.makeText(getActivity(), "Добавлено в раздел провалено:(", Toast.LENGTH_LONG)
                    .show();
            ContentValues cv1 = new ContentValues();
            cv1.put(DataBase.LOSE, s1);
              sqdb.insert(DataBase.TABLE_NAME2, DataBase.LOSE, cv1);
            return true;
        }
        return super.onContextItemSelected(item);
    }

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
package info.androidhive.tabsswipe;
 
import java.util.ArrayList;
 
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;
 
public class TopRatedFragment extends Fragment {
    
    DataBase sqh;
    SQLiteDatabase sqdb;
    ListView lw2;
    ArrayAdapter <String> adapter;
    ArrayList <String> label = new ArrayList <String>();
    Cursor cursor;
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
 
        View rootView = inflater.inflate(R.layout.fragment_top_rated, container, false);
    
        lw2 = (ListView) rootView.findViewById(R.id.lw2);
        sqh = new DataBase(getActivity().getApplicationContext());
          sqdb = sqh.getWritableDatabase();
         
            
        return rootView;
    }
    
 
    @Override
    public void onResume(){
        super.onResume();
        sqh = new DataBase(getActivity().getApplicationContext());
        sqdb = sqh.getWritableDatabase();
         cursor = sqdb.query(DataBase.TABLE_NAME3, new String[] {
                DataBase._ID, DataBase.WIN }, null,null,null,null,null);
     
        while (cursor.moveToNext()) {
            int id = cursor.getInt(cursor.getColumnIndex(DataBase._ID));
            String name = cursor.getString(cursor.getColumnIndexOrThrow(DataBase.WIN));
            label.add(name);
        
        } 
        
        if (label != null) {adapter = new ArrayAdapter <String> (getActivity(),android.R.layout.simple_list_item_1,label);
        lw2.setAdapter(adapter);  } 
        //cursor.close();
    }
    @Override
    public void onStop() {
        super.onStop();
 
        sqdb.close();
        sqh.close();
    }
Соответственно, в этом фрагменте я считываю данных из таблицы и вывожу в listview. Проблема в том, что появляются пустые поля.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.08.2014, 23:23
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Чтение данных из бд в listview (Программирование Android):

Listview вывод данных и переход по нажатию на другой Listview SQLite - Программирование Android
Доброго извините за название темы, долго не мог сформировать название, В общем у меня беда с пытаюсь написать программу где первый экран...

Копирование данных из 1 listView во 2 listView - Программирование Android
Нужно что бы при нажатии на один элемент в первом ListView он копировался во второй ListView причём многократно.Но я использую...

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

TableLayout - чтение данных из строк, изменение данных в строках - Программирование Android
Заполнить TableLayout довольно просто. А вот прочитать ... И примеры есть в интернете, и клипса не ругается, и методы эти существуют...

Добавление данных в ListView - Программирование Android
Здравствуйте, не могу найти решение проблемы, добавляю записи в listview, а они отображаются только после переворота экрана. Как это решить?

ListView: передача данных в item - Программирование Android
Элементы ListView содержат три TextView и два ImageView. В первый TextView записываю данные так: ArrayAdapter&lt;String&gt; adapter = new...

7
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,071
14.08.2014, 08:28 #2
А s1 точно не пустая? Вот пример получения нажатого элемента ListView
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
   @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
        AdapterContextMenuInfo aMenuInfo = (AdapterContextMenuInfo) menuInfo;
 
        // Получаем позицию элемента в списке
        int position = aMenuInfo.position;
 
        // Получаем данные элемента списка, тип данных здесь вы должны указать свой!
        final AdapterData data = adapter.getItem(aMenuInfo.position);
 
        menu.setHeaderTitle("Заголовок");
        menu.add("Первый элемент").setOnMenuItemClickListener(new OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                // дествия по клику меню
                return true;
            }
        });
    }
0
Lers
13 / 13 / 3
Регистрация: 27.05.2012
Сообщений: 203
14.08.2014, 13:10  [ТС] #3
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
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
    AdapterContextMenuInfo aMenuInfo = (AdapterContextMenuInfo) menuInfo;
 
    // Получаем позицию элемента в списке
    int position = aMenuInfo.position;
 
    // Получаем данные элемента списка, тип данных здесь вы должны указать свой!
    final String data = adapter.getItem(aMenuInfo.position);
    
    menu.add("Win").setOnMenuItemClickListener(new OnMenuItemClickListener() {
        @Override
        public boolean onMenuItemClick(MenuItem item) {
            // дествия по клику меню
            
            cv = new ContentValues();
            cv.put(DataBase.LOSE,data);
              sqdb.insert(DataBase.TABLE_NAME3, DataBase.WIN, cv);
             
            
            return true;
        }
    });
    
    final String data1  = adapter.getItem(aMenuInfo.position);
    menu.add("Lose").setOnMenuItemClickListener(new OnMenuItemClickListener() {
        @Override
        public boolean onMenuItemClick(MenuItem item) {
            // дествия по клику меню
            
            ContentValues cv1 = new ContentValues();
            cv1.put(DataBase.WIN,data1);
              sqdb.insert(DataBase.TABLE_NAME2, DataBase.LOSE, cv1);
            return true;
        }
    });
Написал так, не работает. Хелп

Добавлено через 21 минуту
cv.put(DataBase.LOSE,data); не заметил что не туда добавляю, поправил.
sqdb.insert(DataBase.TABLE_NAME3, DataBase.WIN, cv);

Теперь добавляет только в таблицу WIN, а во вторую не добавляет.
0
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,071
14.08.2014, 13:19 #4
Попробуйте поменять местами функции добавления, что будет?
0
Lers
13 / 13 / 3
Регистрация: 27.05.2012
Сообщений: 203
14.08.2014, 13:30  [ТС] #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
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
    AdapterContextMenuInfo aMenuInfo = (AdapterContextMenuInfo) menuInfo;
 
    // Получаем позицию элемента в списке
    int position = aMenuInfo.position;
 
    // Получаем данные элемента списка, тип данных здесь вы должны указать свой!
    final String data = adapter.getItem(aMenuInfo.position);
    
    menu.add("Win").setOnMenuItemClickListener(new OnMenuItemClickListener() {
        @Override
        public boolean onMenuItemClick(MenuItem item) {
            // дествия по клику меню
            
            cv = new ContentValues();
            cv.put(DataBase.WIN,data);
              sqdb.insert(DataBase.TABLE_NAME3, DataBase.WIN, cv);
             
            
            return true;
        }
    });
    
    final String data1  = adapter.getItem(aMenuInfo.position);
    menu.add("Lose").setOnMenuItemClickListener(new OnMenuItemClickListener() {
        @Override
        public boolean onMenuItemClick(MenuItem item) {
            // дествия по клику меню
            
            ContentValues cv1 = new ContentValues();
            cv1.put(DataBase.LOSE,data1);
              sqdb.insert(DataBase.TABLE_NAME2, DataBase.LOSE, cv1);
            return true;
        }
    });
Вот так сделал все работает, но только при добавление во 2 таблицу LOSE, сразу не отображает изменения listview'a на другом фрагменте. Запись появляется, но позже(По другим фрагментам походил, вернулся, запись уже видна). С первой таблицей WIN все сразу появляется.
0
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,071
14.08.2014, 13:36 #6
А обновление?
Java
1
2
3
adapter.notifyDataSetChanged();
// или
adapter.changeCursor(cursor);
1
Lers
13 / 13 / 3
Регистрация: 27.05.2012
Сообщений: 203
14.08.2014, 13:44  [ТС] #7
не было, сейчас попробую.

Добавлено через 5 минут
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@Override
    public void onResume(){
        super.onResume();
        sqh = new DataBase(getActivity().getApplicationContext());
        sqdb = sqh.getWritableDatabase();
         cursor = sqdb.query(DataBase.TABLE_NAME2, new String[] {
                DataBase._ID, DataBase.LOSE }, null,null,null,null,null);
     
        while (cursor.moveToNext()) {
            int id = cursor.getInt(cursor.getColumnIndex(DataBase._ID));
            String name = cursor.getString(cursor.getColumnIndexOrThrow(DataBase.LOSE));
            label.add(name);
        
        } 
        
        if (label != null) {
               adapter = new ArrayAdapter <String> (getActivity(),android.R.layout.simple_list_item_1,label);
        lw2.setAdapter(adapter); 
               adapter.notifyDataSetChanged();  }
Добавил, проблема осталась.
0
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,071
14.08.2014, 14:27 #8
У меня в приложении, при выборе элемента из контекстного меню ListView, удалятся запись из БД. Изменения сразу видны.
Делаю так:
Java
1
2
3
4
5
6
7
8
9
10
public boolean onContextItemSelected(MenuItem item) {   
    // получаем из пункта контекстного меню данные по пункту списка
    AdapterContextMenuInfo acmi = (AdapterContextMenuInfo) item.getMenuInfo();
    // получить из БД в избранном ли (1/0)
    int i = item.getTitle().equals(getString(R.string.add_to_favorite)) ? 1 : 0;
    MainActivity.db.addRemoveFromFavorite(acmi.id, i); // добавить/удалить в избранное
    cursor = MainActivity.db.getData(pageNumber); // обновление списка
    scAdapter.changeCursor(cursor);
    return super.onContextItemSelected(item);
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.08.2014, 14:27
Привет! Вот еще темы с ответами:

Передача данных между ListView - Программирование Android
Доброго времени суток форумчане! Не получается решить одну проблему, надеюсь на вашу помощь. В классе фрагмента есть метод onCreateView,...

Вывод данных в список Listview - Программирование Android
Код: package com.example.projecta; import java.io.IOException; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; ...

Отправка данных из listview на email - Программирование Android
Доброго времени суток ! Есть приложение, сейчас из себя представляет, что то вроде ресторанного меню, в котором можно добавить любое...

Android, ListView, база данных SQLite - Программирование Android
Как достать картинку из БД (SQLite) и поместить её в ListView??? помогите, пожалуйста :)


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

Или воспользуйтесь поиском по форуму:
8
Yandex
Объявления
14.08.2014, 14:27
Ответ Создать тему
Опции темы

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