Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
7 / 7 / 1
Регистрация: 20.04.2013
Сообщений: 666
1

Получить id записи в бд при нажатии на пункт списка

25.05.2013, 19:27. Показов 2037. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
У меня такой вопрос:

Есть список ListView который заполняется данными из Базы (SQLite). Мне нужно при нажатии на пункт списка получить не просто id-item этой записи, а получить ещё и id этой записи в базе данных. После чего, чтобы я мог использовать полученный id. Подскажите, как поступить? на ум приходит только мысль сделать SetText на item, сделать её невидимой, а после уже получить данные как то так String selection = l.getItemAtPosition(position).toString(); Но уверен, что это неправильный способ и должен быть другой правильный вариант.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.05.2013, 19:27
Ответы с готовыми решениями:

При нажатии на пункт меню скрыть его, и показать другой пункт меню
Прошу помощи, как можно допустим при нажатии на пункт меню, его скрыть, и показать другой пункт...

получить data из Списка при нажатии
список из ссылок <a class="selector" data-item="1">1</a> <a class="selector"...

Нажатием на пункт списка в ListView получить значение
Как при нажатии на пункт списка в ListView получить то что там написано (написана одна строчка)....

Ошибка при запуске AsyncTask при нажатии на пункт ActionBar
Здравствуйте, почему при нажатии на пункт Action Bar'а вылетает ошибка? @Override public...

16
1162 / 986 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
25.05.2013, 19:50 2
покажите свой код, а мы уже подскажем что куда добавить.
0
7 / 7 / 1
Регистрация: 20.04.2013
Сообщений: 666
25.05.2013, 20:15  [ТС] 3
Класс(Fragment) расширяющий ListFragment:
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
public class Fragment2 extends ListFragment {
 
    private static final String TABLE_MY_DB_TOP = "myDBTop";
    private static final String KEY_ID = "id_top";
    private static final String KEY_CATEGORY = "category";
    private static final String KEY_TITLE = "title";
    private static final String CATEGORY_CINEMA = "Cinema";
    
    private SQLiteDatabase database;
    private ListView listView;
    private ArrayList<String> values = new ArrayList<String>();
    private ListView mListView;
        
    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        ListTopImageAdapter mAdapter = new ListTopImageAdapter(getActivity(), values);
        mListView.setAdapter(mAdapter);
        super.onActivityCreated(savedInstanceState);
}
 
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
 
        View myView = inflater.inflate(R.layout.fragment_screen2,
                container, false);
        mListView = (ListView) myView.findViewById(android.R.id.list);
        return myView;
    }
        
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
}
 
    private void fillCinema() {
            DBHelperSqLite dbOpenHelper = new DBHelperSqLite(getActivity());
            database = dbOpenHelper.getReadableDatabase();
            
            values = new ArrayList<String>();
            Cursor valuesCursor = database.query(TABLE_MY_DB_TOP,
                                                 new String[] 
                                                 {KEY_ID, KEY_CATEGORY, KEY_TITLE},
                                                 KEY_CATEGORY + "= ?", new String[] {CATEGORY_CINEMA}, null, null
                                                 , KEY_TITLE);
            
            
            valuesCursor.moveToFirst();
            if(!valuesCursor.isAfterLast()) {
                do {
                    String name = valuesCursor.getString(2);
                    values.add(name);
                } while (valuesCursor.moveToNext());
            }
            valuesCursor.close();
            dbOpenHelper.close();
            database.close();
            
            ListTopImageAdapter mAdapter = new ListTopImageAdapter(getActivity(),
                    values);
            mListView.setAdapter(mAdapter);
            
        }
 
@Override
    public void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id);
        
        String selection = l.getItemAtPosition(position).toString();
        Toast.makeText(getActivity(), selection, Toast.LENGTH_LONG).show();
        }
код adaptera:
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
public class ListTopImageAdapter extends ArrayAdapter<String> {
    private final Context context;
     
    private final ArrayList<String> friends;
    
    public ListTopImageAdapter(Context context, ArrayList<String> friends) {super(context, R.layout.item_fragment2, friends);
    this.context = context;
    this.friends = friends;
}
 
 @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
 
        View rowView = inflater.inflate(R.layout.item_fragment2, parent, false);
        TextView textView = (TextView) rowView.findViewById(R.id.label);
        ImageView imageView = (ImageView) rowView.findViewById(R.id.icon);
 
        textView.setText(friends.get(position) );
 
        String s = friends.get(position);
 
        System.out.println(s);
        
        if (s.equals("About App")) {
            imageView.setImageResource(R.drawable.button_in);
        } else if (s.equals("Tools Tutorial")) {
            imageView.setImageResource(R.drawable.button_on);
        } else if (s.equals("About App Seen")) {
            imageView.setImageResource(android.R.drawable.btn_minus);
        } else if (s.equals("App Technical Contact")) {
            imageView.setImageResource(R.drawable.button_in_on);
         }
 
        return rowView;
    }
}
0
1162 / 986 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
25.05.2013, 20:45 4
создайте класс с полями которые вам нужны и используйте его вместо String.
вместо ArrayList<String> friends используйте ArrayList<MyClass> friends
в getView
Java
1
2
3
String s = friends.get(position).getS();
int id = friends.get(position).getId();
rowView.setTag(id);
в onListItemClick
Java
1
int id = (Integer)v.getTag();
0
7 / 7 / 1
Регистрация: 20.04.2013
Сообщений: 666
25.05.2013, 20:51  [ТС] 5
ооо, спасибо за ответ. А не могли бы привести подробней пример. Просто мне кажется, что я не понимаю, что нужно сделать, хотя вроде необходимо мало что написать.
0
1162 / 986 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
25.05.2013, 20:53 6
все что нужно я уже написал, а с созданием дополнительного класса для передачи данных думаю вы справитесь.
0
7 / 7 / 1
Регистрация: 20.04.2013
Сообщений: 666
25.05.2013, 21:23  [ТС] 7
создал класс модель с полями:

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
public class ModelDBFrag2 {
 
    // private variables
    String id_top;
    String name_category;
 
    // Empty constructor
    public ModelDBFrag2() {
 
    }
 
    // constructor
    public ModelDBFrag2(String id_top, String name_category) {
        this.id_top = id_top;
        this.name_category = name_category;
    }
 
    public String getId_top() {
        return id_top;
    }
 
    public void setId_top(String id_top) {
        this.id_top = id_top;
    }
 
    public String getName_category() {
        return name_category;
    }
 
    public void setName_category(String name_category) {
        this.name_category = name_category;
    }
}
а дальше что делать?

получать данные из таблицы так же нужно?:
Java
1
2
                                        String id = valuesCursor.getString(1);
                    String name = valuesCursor.getString(2);
и добавлять по прежнему так?:
Java
1
2
                    values.add(id);
                    values.add(name);
Меняю ArrayList<String> friends на ArrayList<ModelDBFrag2 > friends , но куче ошибок. Не пойму что в классе адаптере менять нужно, везде ArrayList<String> friends на ArrayList<ModelDBFrag2 > friends ?? если да, то не получается, как надо?
0
1162 / 986 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
25.05.2013, 21:28 8
да, вы все правильно поняли. что именно не получается?
кстати нумерация начинается с 0, судя по коду который вы выложили нужно писать
Java
1
 String id = valuesCursor.getString(0);
0
7 / 7 / 1
Регистрация: 20.04.2013
Сообщений: 666
25.05.2013, 21:47  [ТС] 9
Цитата Сообщение от V0v1k Посмотреть сообщение
кстати нумерация начинается с 0, судя по коду который вы выложили нужно писать
да. я знаю, что с нуля. Мне просто нужно получить не Id записи, а ID записи который я ей сам присвоил. и это как раз вторая колонка.

изменил код адаптера так:
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
public class ListTopImageAdapter extends ArrayAdapter<ModelDBFrag2> {
    private final Context context;
   // private final String[] values;
    
    private final ArrayList<ModelDBFrag2> friends;
    
    public ListTopImageAdapter(Context context, ArrayList<ModelDBFrag2> friends) {super(context, R.layout.item_fragment2, friends);
    this.context = context;
    this.friends = friends;
}
    
    
//    public ListTopImageAdapter(Context context, String[] values) {super(context, R.layout.item_fragment2, values);
//        this.context = context;
//        this.values = values;
//    }
 
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
 
        View rowView = inflater.inflate(R.layout.item_fragment2, parent, false);
        TextView textView = (TextView) rowView.findViewById(R.id.label);
        ImageView imageView = (ImageView) rowView.findViewById(R.id.icon);
  
        
       textView.setText((CharSequence) friends.get(position) ); // было так textView.setText(friends.get(position) );, а стало так
 
        
       String s = friends.get(position).getName_category();
       String id = friends.get(position).getId_top();
       rowView.setTag(id);
               
        System.out.println(s);
        
        if (s.equals("About App")) {
            imageView.setImageResource(R.drawable.button_in);
        } else if (s.equals("Tools Tutorial")) {
            imageView.setImageResource(R.drawable.button_on);
        } else if (s.equals("App Technical Contact")) {
            imageView.setImageResource(android.R.drawable.btn_minus);
        } else if (s.equals("App Technical Contact")) {
            imageView.setImageResource(R.drawable.button_on);
         }
 
        return rowView;
    }
}
но подчёркивает в методе извлечения элементов из базы данных fillCinema() :

values.add(id);
values.add(name);

и пишет The method add(ModelDBFrag2) in the type ArrayList<ModelDBFrag2> is not applicable for the arguments (String)
0
1162 / 986 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
25.05.2013, 21:56 10
примерно так
Java
1
2
ModelDBFrag2 value = new ModelDBFrag2(id, name);
values.add(value);
0
7 / 7 / 1
Регистрация: 20.04.2013
Сообщений: 666
25.05.2013, 22:02  [ТС] 11
а так можно?:
Java
1
2
3
String id = valuesCursor.getString(1);
String name = valuesCursor.getString(2);
ModelDBFrag2 model = new ModelDBFrag2(id, name);
или нужно так:

Java
1
2
3
4
5
String id = valuesCursor.getString(1);
String name = valuesCursor.getString(2);
ModelDBFrag2 model = new ModelDBFrag2();
model.setId_top(id);
model.setName_category(name);
или нужно как вы написали?
0
1162 / 986 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
25.05.2013, 22:06 12
здесь без разницы.
0
7 / 7 / 1
Регистрация: 20.04.2013
Сообщений: 666
25.05.2013, 22:31  [ТС] 13
почему то сыпятся ошибки:

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
05-25 18:27:47.891: E/AndroidRuntime(23232): FATAL EXCEPTION: main
05-25 18:27:47.891: E/AndroidRuntime(23232): java.lang.ClassCastException: by.my.project.ModelDBFrag2
05-25 18:27:47.891: E/AndroidRuntime(23232):    at by.appetitsoft.mevolution.ListTopImageAdapter.getView(ListTopImageAdapter.java:39)
05-25 18:27:47.891: E/AndroidRuntime(23232):    at android.widget.AbsListView.obtainView(AbsListView.java:1315)
05-25 18:27:47.891: E/AndroidRuntime(23232):    at android.widget.ListView.measureHeightOfChildren(ListView.java:1198)
05-25 18:27:47.891: E/AndroidRuntime(23232):    at android.widget.ListView.onMeasure(ListView.java:1109)
05-25 18:27:47.891: E/AndroidRuntime(23232):    at android.view.View.measure(View.java:8171)
05-25 18:27:47.891: E/AndroidRuntime(23232):    at android.widget.RelativeLayout.measureChild(RelativeLayout.java:563)
05-25 18:27:47.891: E/AndroidRuntime(23232):    at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:378)
05-25 18:27:47.891: E/AndroidRuntime(23232):    at android.view.View.measure(View.java:8171)
05-25 18:27:47.891: E/AndroidRuntime(23232):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3132)
05-25 18:27:47.891: E/AndroidRuntime(23232):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
05-25 18:27:47.891: E/AndroidRuntime(23232):    at android.view.View.measure(View.java:8171)
05-25 18:27:47.891: E/AndroidRuntime(23232):    at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1249)
05-25 18:27:47.891: E/AndroidRuntime(23232):    at android.view.View.measure(View.java:8171)
05-25 18:27:47.891: E/AndroidRuntime(23232):    at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:578)
05-25 18:27:47.891: E/AndroidRuntime(23232):    at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:362)
05-25 18:27:47.891: E/AndroidRuntime(23232):    at android.view.View.measure(View.java:8171)
05-25 18:27:47.891: E/AndroidRuntime(23232):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3132)
05-25 18:27:47.891: E/AndroidRuntime(23232):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
05-25 18:27:47.891: E/AndroidRuntime(23232):    at android.view.View.measure(View.java:8171)
05-25 18:27:47.891: E/AndroidRuntime(23232):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3132)
05-25 18:27:47.891: E/AndroidRuntime(23232):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
05-25 18:27:47.891: E/AndroidRuntime(23232):    at android.view.View.measure(View.java:8171)
05-25 18:27:47.891: E/AndroidRuntime(23232):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3132)
05-25 18:27:47.891: E/AndroidRuntime(23232):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
05-25 18:27:47.891: E/AndroidRuntime(23232):    at android.view.View.measure(View.java:8171)
05-25 18:27:47.891: E/AndroidRuntime(23232):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3132)
05-25 18:27:47.891: E/AndroidRuntime(23232):    at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1012)
05-25 18:27:47.891: E/AndroidRuntime(23232):    at android.widget.LinearLayout.measureVertical(LinearLayout.java:381)
05-25 18:27:47.891: E/AndroidRuntime(23232):    at android.widget.LinearLayout.onMeasure(LinearLayout.java:304)
05-25 18:27:47.891: E/AndroidRuntime(23232):    at android.view.View.measure(View.java:8171)
05-25 18:27:47.891: E/AndroidRuntime(23232):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3132)
05-25 18:27:47.891: E/AndroidRuntime(23232):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
05-25 18:27:47.891: E/AndroidRuntime(23232):    at android.view.View.measure(View.java:8171)
05-25 18:27:47.891: E/AndroidRuntime(23232):    at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:578)
05-25 18:27:47.891: E/AndroidRuntime(23232):    at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:362)
05-25 18:27:47.891: E/AndroidRuntime(23232):    at android.view.View.measure(View.java:8171)
05-25 18:27:47.891: E/AndroidRuntime(23232):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3132)
05-25 18:27:47.891: E/AndroidRuntime(23232):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
05-25 18:27:47.891: E/AndroidRuntime(23232):    at android.view.View.measure(View.java:8171)
05-25 18:27:47.891: E/AndroidRuntime(23232):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3132)
05-25 18:27:47.891: E/AndroidRuntime(23232):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
05-25 18:27:47.891: E/AndroidRuntime(23232):    at android.view.View.measure(View.java:8171)
05-25 18:27:47.891: E/AndroidRuntime(23232):    at android.view.ViewRoot.performTraversals(ViewRoot.java:801)
05-25 18:27:47.891: E/AndroidRuntime(23232):    at android.view.ViewRoot.handleMessage(ViewRoot.java:1727)
05-25 18:27:47.891: E/AndroidRuntime(23232):    at android.os.Handler.dispatchMessage(Handler.java:99)
05-25 18:27:47.891: E/AndroidRuntime(23232):    at android.os.Looper.loop(Looper.java:123)
05-25 18:27:47.891: E/AndroidRuntime(23232):    at android.app.ActivityThread.main(ActivityThread.java:4627)
05-25 18:27:47.891: E/AndroidRuntime(23232):    at java.lang.reflect.Method.invokeNative(Native Method)
05-25 18:27:47.891: E/AndroidRuntime(23232):    at java.lang.reflect.Method.invoke(Method.java:521)
05-25 18:27:47.891: E/AndroidRuntime(23232):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
05-25 18:27:47.891: E/AndroidRuntime(23232):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
05-25 18:27:47.891: E/AndroidRuntime(23232):    at dalvik.system.NativeStart.main(Native Method)
0
1162 / 986 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
25.05.2013, 22:33 14
Цитата Сообщение от Stylish2013 Посмотреть сообщение
ListTopImageAdapter.java:39
что в этой строчке?
0
7 / 7 / 1
Регистрация: 20.04.2013
Сообщений: 666
25.05.2013, 22:39  [ТС] 15
в этой строчке
Java
1
textView.setText((CharSequence) friends.get(position));
а до того как внедрили класс Model, было так
Java
1
textView.setText(friends.get(position));
оно высветило ошибку и я нажал исправить и оно исправило на то как есть сейчас.

к тому же я подебажил и да, на этом месте вываливается.
0
1162 / 986 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
25.05.2013, 22:41 16
Java
1
textView.setText(friends.get(position).getNameCategory());
советую вам почитать книгу по основам Java.
1
7 / 7 / 1
Регистрация: 20.04.2013
Сообщений: 666
26.05.2013, 03:43  [ТС] 17
Надо сделать так?
Java
1
 textView.setText(friends.get(position).getName_category());
только так сделал и вы написали.

Цитата Сообщение от V0v1k Посмотреть сообщение
советую вам почитать книгу по основам Java.
это не помешает, но не углядел этот момент.

Добавлено через 5 часов 0 минут
V0v1k, Спасибо Вам, всё получилось, помогли решить данную задачу!
0
26.05.2013, 03:43
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.05.2013, 03:43
Помогаю со студенческими работами здесь

Действие при нажатии на пункт TTreeView
Здравствуйте, на форме есть компонент TreeView и как пример записанные разделы: Десерт первый...

Загрузить текст при нажатии на пункт меню
Подскажите пожалуйста саму идею реализации. Есть БД из одной таблицы (id, parent_id, name, text)....

При нажатии на пункт меню пропадает лого
вот картинка до нажатия вот после нажатия влот мой header.php &lt;!DOCTYPE html&gt; &lt;html&gt; ...

Нарисовать фигуру при нажатии на пункт меню
Вот смотрите, используя switch(messg){case WM_PAINT:.....} мы рисуемо, а вот у меня такая проблема...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru