Урок 53. SimpleCursorTreeAdapter, пример использования
Re: Урок 53. SimpleCursorTreeAdapter, пример использования
Как перерисовать image в groupItem? В android.R.layout.simple_expandable_list_item_1 он не указан, откуда он вообще берется?
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Урок 53. SimpleCursorTreeAdapter, пример использования
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
Re: Урок 53. SimpleCursorTreeAdapter, пример использования
KamiSempai, там то я был, но откуда вставляется image это не помогло найти)
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Урок 53. SimpleCursorTreeAdapter, пример использования
Пардон, ссылка битая получилась вот более корректная:
То, что я мел ввиду
То, что я мел ввиду
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
Re: Урок 53. SimpleCursorTreeAdapter, пример использования
Помогите пжл разобраться!
В коде урока удаляю все final string и далее по коду называю все своими именами, как было упомянуто в final stringах.
Сохраняю и в MainActivity выходит ошибка.
В коде урока удаляю все final string и далее по коду называю все своими именами, как было упомянуто в final stringах.
Сохраняю и в MainActivity выходит ошибка.
- Вложения
-
- Снимок.JPG (88.53 КБ) 12949 просмотров
Re: Урок 53. SimpleCursorTreeAdapter, пример использования
какая?
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Урок 53. SimpleCursorTreeAdapter, пример использования
Подчеркнуто красным. DB cannot be resolved to a variable
Re: Урок 53. SimpleCursorTreeAdapter, пример использования
Убери тогда текст "DB." везде.
Re: Урок 53. SimpleCursorTreeAdapter, пример использования
DB это обращение к переменной DB, а дальше должен идти после точки или метод или свойство. У вас есть в переменной данного типа это свойство? думаю, что нет. Вот поэтому выдается такая ошибка.
Чтобы получить перечень всех свойств и методов объекта, нужно поставить курсор после . и нажать ctrl+пробел (или оно само вылетает это окно).
Чтобы получить перечень всех свойств и методов объекта, нужно поставить курсор после . и нажать ctrl+пробел (или оно само вылетает это окно).
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Урок 53. SimpleCursorTreeAdapter, пример использования
Я почему то подумал ( по описанию), что он из класса DB все константы решил удалить и просто использовать названия полей.
Re: Урок 53. SimpleCursorTreeAdapter, пример использования
да кто его знает
имхо твой ответ правильный в данной ситуации, но способ программирования тут подкачал. Конечно, нужны константы.
имхо твой ответ правильный в данной ситуации, но способ программирования тут подкачал. Конечно, нужны константы.
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Урок 53. SimpleCursorTreeAdapter, пример использования
Понятно, что такой способ программирования тут подкачал и нужны константы. Чтобы проще освоить урок, я обычно по своему называю переменные, адаптеры, вношу какие нибудь изменения. Зубрить чужой код для меня сложнее.
Вообщем проблему еще не решил
Так выглядит у меня DB.java
public class DB {
private final Context mCtx;
private DBHelper mDBHelper;
private SQLiteDatabase mDB;
public DB(Context ctx) {
mCtx = ctx;
}
// открываем подключение
public void open() {
mDBHelper = new DBHelper(mCtx, "mydb", null, 1);
mDB = mDBHelper.getWritableDatabase();
}
// закрываем подключение
public void close() {
if (mDBHelper != null)
mDBHelper.close();
}
// данные по компаниям
public Cursor getCompanyData() {
return mDB.query("company", null, null, null, null, null, null);
}
// данные по телефонам конкретной группы
public Cursor getPhoneData(long companyID) {
return mDB.query("phone", null, "company" + " = "
+ companyID, null, null, null, null);
}
private class DBHelper extends SQLiteOpenHelper {
public DBHelper(Context context, String name, CursorFactory factory,
int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
ContentValues cv = new ContentValues();
// названия компаний (групп)
String[] companies = new String[] { "HTC", "Samsung", "LG" };
// создаем и заполняем таблицу компаний
db.execSQL( "create table company_table ("
+ "_id"
+ " integer primary key, "
+ "name"
+ " text"
+ ");");
for (int i = 0; i < companies.length; i++) {
cv.put("_id", i + 1);
cv.put("name", companies);
db.insert("company_table", null, cv);
}
// названия телефонов (элементов)
String[] phonesHTC = new String[] { "Sensation", "Desire",
"Wildfire", "Hero" };
String[] phonesSams = new String[] { "Galaxy S II", "Galaxy Nexus",
"Wave" };
String[] phonesLG = new String[] { "Optimus", "Optimus Link",
"Optimus Black", "Optimus One" };
// создаем и заполняем таблицу телефонов
db.execSQL("create table phone_table ("
+ "_id"
+ " integer primary key autoincrement, "
+ "name"
+ " text, "
+ "company"
+ " integer"
+ ");");
cv.clear();
for (int i = 0; i < phonesHTC.length; i++) {
cv.put("company", 1);
cv.put("name", phonesHTC);
db.insert("phone", null, cv);
}
for (int i = 0; i < phonesSams.length; i++) {
cv.put("company", 2);
cv.put("name", phonesSams);
db.insert("phone", null, cv);
}
for (int i = 0; i < phonesLG.length; i++) {
cv.put("company", 3);
cv.put("name", phonesLG);
db.insert("phone", null, cv);
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
}
Вообщем проблему еще не решил
Так выглядит у меня DB.java
public class DB {
private final Context mCtx;
private DBHelper mDBHelper;
private SQLiteDatabase mDB;
public DB(Context ctx) {
mCtx = ctx;
}
// открываем подключение
public void open() {
mDBHelper = new DBHelper(mCtx, "mydb", null, 1);
mDB = mDBHelper.getWritableDatabase();
}
// закрываем подключение
public void close() {
if (mDBHelper != null)
mDBHelper.close();
}
// данные по компаниям
public Cursor getCompanyData() {
return mDB.query("company", null, null, null, null, null, null);
}
// данные по телефонам конкретной группы
public Cursor getPhoneData(long companyID) {
return mDB.query("phone", null, "company" + " = "
+ companyID, null, null, null, null);
}
private class DBHelper extends SQLiteOpenHelper {
public DBHelper(Context context, String name, CursorFactory factory,
int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
ContentValues cv = new ContentValues();
// названия компаний (групп)
String[] companies = new String[] { "HTC", "Samsung", "LG" };
// создаем и заполняем таблицу компаний
db.execSQL( "create table company_table ("
+ "_id"
+ " integer primary key, "
+ "name"
+ " text"
+ ");");
for (int i = 0; i < companies.length; i++) {
cv.put("_id", i + 1);
cv.put("name", companies);
db.insert("company_table", null, cv);
}
// названия телефонов (элементов)
String[] phonesHTC = new String[] { "Sensation", "Desire",
"Wildfire", "Hero" };
String[] phonesSams = new String[] { "Galaxy S II", "Galaxy Nexus",
"Wave" };
String[] phonesLG = new String[] { "Optimus", "Optimus Link",
"Optimus Black", "Optimus One" };
// создаем и заполняем таблицу телефонов
db.execSQL("create table phone_table ("
+ "_id"
+ " integer primary key autoincrement, "
+ "name"
+ " text, "
+ "company"
+ " integer"
+ ");");
cv.clear();
for (int i = 0; i < phonesHTC.length; i++) {
cv.put("company", 1);
cv.put("name", phonesHTC);
db.insert("phone", null, cv);
}
for (int i = 0; i < phonesSams.length; i++) {
cv.put("company", 2);
cv.put("name", phonesSams);
db.insert("phone", null, cv);
}
for (int i = 0; i < phonesLG.length; i++) {
cv.put("company", 3);
cv.put("name", phonesLG);
db.insert("phone", null, cv);
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
}
Re: Урок 53. SimpleCursorTreeAdapter, пример использования
public static final String name = "name";
public static final String _id = "_id";
таких строчек не хватает в твоем классе DB
и заместо
DB."name" пиши DB.name
DB."_id" пиши DB._id
public static final String _id = "_id";
таких строчек не хватает в твоем классе DB
и заместо
DB."name" пиши DB.name
DB."_id" пиши DB._id
Re: Урок 53. SimpleCursorTreeAdapter, пример использования
Вот более точная формулировка моего вопроса.
Почему если здесь одно равно другому
public static final String name = "name";
public static final String _id = "_id";
то здесь
DB."name" неправильно, а DB.name правильно?
DB."_id" , DB._id соответственно ?
Почему если здесь одно равно другому
public static final String name = "name";
public static final String _id = "_id";
то здесь
DB."name" неправильно, а DB.name правильно?
DB."_id" , DB._id соответственно ?
Re: Урок 53. SimpleCursorTreeAdapter, пример использования
код даже читать не хочу, раз не форматируешь
в кавычках записывают только строки.
в кавычках записывают только строки.
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Урок 53. SimpleCursorTreeAdapter, пример использования
public static final String name = "name";
тут нету никакого правила что ИМЯ константы должно быть равно ее значению - ты мог написать и так
public static final String name_random = "name";
DB."name" - не верный синтаксис и к значению public static final String name = "name" никак не относится.
тыже не пишешь mDBHelper."getWritableDatabase()" в своем коде?
через точку ты обращаешься к переменным/методам класса
тут нету никакого правила что ИМЯ константы должно быть равно ее значению - ты мог написать и так
public static final String name_random = "name";
DB."name" - не верный синтаксис и к значению public static final String name = "name" никак не относится.
тыже не пишешь mDBHelper."getWritableDatabase()" в своем коде?
через точку ты обращаешься к переменным/методам класса
Re: Урок 53. SimpleCursorTreeAdapter, пример использования
Privet!
S nachalo hochu skazatj spasibo za vashi lekciji! Ochenj poljeznjije!!!
No tak kak sechas startManagingCursor uzhe deprecated, to kak togda luchshe napisatj kod po novomu dlja etot lekciji?
S nachalo hochu skazatj spasibo za vashi lekciji! Ochenj poljeznjije!!!
No tak kak sechas startManagingCursor uzhe deprecated, to kak togda luchshe napisatj kod po novomu dlja etot lekciji?
Re: Урок 53. SimpleCursorTreeAdapter, пример использования
eto uge 100500 raz obsuzhdalos tut, ispolzuy poisk!
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Урок 53. SimpleCursorTreeAdapter, пример использования
Есть не большой вопрос! Подскажите, можно ли в childFrom заносить несколько столбцов таблицы? т.е.
String[] childFrom = { DB.PHONE_COLUMN_NAME,DB.PHONE_COLUMN_ID }; В таком виде, как написал я, отображается содержимое DB.PHONE_COLUMN_NAME
String[] childFrom = { DB.PHONE_COLUMN_NAME,DB.PHONE_COLUMN_ID }; В таком виде, как написал я, отображается содержимое DB.PHONE_COLUMN_NAME
Re: Урок 53. SimpleCursorTreeAdapter, пример использования
если не тродно,можете подсказать что я делаю не так:
ошибку выдает на
Код ошибки: The constructor SimpleCursorTreeAdapter(Context, Cursor, int, String[], int[], int, String[], int[], int, String[], int[]) is undefined
Код: Выделить всё
package ru.startandroid.develop.p0531simplecursortreeadapter;
import android.app.Activity;
import android.content.Context;
import android.database.Cursor;
import android.os.Bundle;
import android.widget.ExpandableListView;
import android.widget.SimpleCursorTreeAdapter;
public class MainActivity extends Activity {
ExpandableListView elvMain;
DB db;
/** Called when the activity is first created. */
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// подключаемся к БД
db = new DB(this);
db.open();
// готовим данные по группам для адаптера
Cursor cursor = db.getCompanyData();
// startManagingCursor(cursor);
// сопоставление данных и View для групп
String[] groupFrom = { DB.COMPANY_COLUMN_NAME };
int[] groupTo = { android.R.id.text1 };
// сопоставление данных и View для элементов
String[] childFrom = {"phone.name" };
int[] childTo = { android.R.id.text1 };
String[] childF1 = {"phone.nog" };
int[] childT1 = { android.R.id.text1 };
// создаем адаптер и настраиваем список
/* SimpleCursorTreeAdapter sctAdapter = new MyAdapter(this, cursor,
android.R.layout.simple_expandable_list_item_1, groupFrom,
groupTo, android.R.layout.simple_list_item_1, childFrom,
childTo, childF1, childT1);*/
SimpleCursorTreeAdapter sctAdapter = new MyAdapter(this, cursor,
android.R.layout.simple_expandable_list_item_1, groupFrom,
groupTo, android.R.layout.simple_list_item_1, childFrom,
childTo,android.R.layout.simple_list_item_1, childF1, childT1);
elvMain = (ExpandableListView) findViewById(R.id.elvMain);
elvMain.setAdapter(sctAdapter);
}
protected void onDestroy() {
super.onDestroy();
db.close();
}
class MyAdapter extends SimpleCursorTreeAdapter {
public MyAdapter(Context context, Cursor cursor, int groupLayout,
String[] groupFrom, int[] groupTo, int childLayout,
String[] childFrom, int[] childTo, int childLayout1,
String[] childF1, int[] childT1) {
super(context, cursor, groupLayout,groupFrom, groupTo,
childLayout, childFrom, childTo,
childLayout1,childF1,childT1);
}
// (context, cursor, groupLayout, groupFrom, groupTo,
// childLayout, childFrom, childTo,childLayout1,childF1,childT1);
protected Cursor getChildrenCursor(Cursor groupCursor) {
// получаем курсор по элементам для конкретной группы
int idColumn = groupCursor.getColumnIndex(DB.COMPANY_COLUMN_ID);
return db.getPhoneData(groupCursor.getInt(idColumn));
}
}
}
Код: Выделить всё
super(context, cursor, groupLayout,groupFrom, groupTo,
childLayout, childFrom, childTo,
childLayout1,childF1,childT1);