Урок 53. SimpleCursorTreeAdapter, пример использования

Обсуждение уроков
Аватара пользователя
Isaev
Сообщения: 145
Зарегистрирован: 03 сен 2013, 09:39
Откуда: Германия
Контактная информация:

Re: Урок 53. SimpleCursorTreeAdapter, пример использования

Сообщение Isaev » 23 окт 2013, 10:59

Как перерисовать image в groupItem? В android.R.layout.simple_expandable_list_item_1 он не указан, откуда он вообще берется?

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Урок 53. SimpleCursorTreeAdapter, пример использования

Сообщение KamiSempai » 23 окт 2013, 12:06

R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Аватара пользователя
Isaev
Сообщения: 145
Зарегистрирован: 03 сен 2013, 09:39
Откуда: Германия
Контактная информация:

Re: Урок 53. SimpleCursorTreeAdapter, пример использования

Сообщение Isaev » 24 окт 2013, 09:14

KamiSempai, там то я был, но откуда вставляется image это не помогло найти)

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Урок 53. SimpleCursorTreeAdapter, пример использования

Сообщение KamiSempai » 24 окт 2013, 12:11

Пардон, ссылка битая получилась вот более корректная:
То, что я мел ввиду
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

aleksbim
Сообщения: 81
Зарегистрирован: 02 фев 2013, 02:52

Re: Урок 53. SimpleCursorTreeAdapter, пример использования

Сообщение aleksbim » 03 дек 2013, 01:24

Помогите пжл разобраться!
В коде урока удаляю все final string и далее по коду называю все своими именами, как было упомянуто в final stringах.
Сохраняю и в MainActivity выходит ошибка.
Вложения
Снимок.JPG
Снимок.JPG (88.53 КБ) 12031 просмотр

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 53. SimpleCursorTreeAdapter, пример использования

Сообщение Foenix » 03 дек 2013, 08:09

какая?
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

aleksbim
Сообщения: 81
Зарегистрирован: 02 фев 2013, 02:52

Re: Урок 53. SimpleCursorTreeAdapter, пример использования

Сообщение aleksbim » 03 дек 2013, 13:49

Подчеркнуто красным. DB cannot be resolved to a variable

WizikTLT
Сообщения: 52
Зарегистрирован: 01 ноя 2013, 13:30

Re: Урок 53. SimpleCursorTreeAdapter, пример использования

Сообщение WizikTLT » 03 дек 2013, 14:06

Убери тогда текст "DB." везде.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 53. SimpleCursorTreeAdapter, пример использования

Сообщение Foenix » 03 дек 2013, 14:27

DB это обращение к переменной DB, а дальше должен идти после точки или метод или свойство. У вас есть в переменной данного типа это свойство? думаю, что нет. Вот поэтому выдается такая ошибка.
Чтобы получить перечень всех свойств и методов объекта, нужно поставить курсор после . и нажать ctrl+пробел (или оно само вылетает это окно).
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

WizikTLT
Сообщения: 52
Зарегистрирован: 01 ноя 2013, 13:30

Re: Урок 53. SimpleCursorTreeAdapter, пример использования

Сообщение WizikTLT » 03 дек 2013, 14:29

Я почему то подумал ( по описанию), что он из класса DB все константы решил удалить и просто использовать названия полей.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 53. SimpleCursorTreeAdapter, пример использования

Сообщение Foenix » 03 дек 2013, 14:30

да кто его знает :)
имхо твой ответ правильный в данной ситуации, но способ программирования тут подкачал. Конечно, нужны константы.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

aleksbim
Сообщения: 81
Зарегистрирован: 02 фев 2013, 02:52

Re: Урок 53. SimpleCursorTreeAdapter, пример использования

Сообщение aleksbim » 03 дек 2013, 16:27

Понятно, что такой способ программирования тут подкачал и нужны константы. Чтобы проще освоить урок, я обычно по своему называю переменные, адаптеры, вношу какие нибудь изменения. Зубрить чужой код для меня сложнее.
Вообщем проблему еще не решил

Так выглядит у меня 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) {
}
}

}

WizikTLT
Сообщения: 52
Зарегистрирован: 01 ноя 2013, 13:30

Re: Урок 53. SimpleCursorTreeAdapter, пример использования

Сообщение WizikTLT » 03 дек 2013, 16:32

public static final String name = "name";
public static final String _id = "_id";
таких строчек не хватает в твоем классе DB
и заместо
DB."name" пиши DB.name
DB."_id" пиши DB._id

aleksbim
Сообщения: 81
Зарегистрирован: 02 фев 2013, 02:52

Re: Урок 53. SimpleCursorTreeAdapter, пример использования

Сообщение aleksbim » 03 дек 2013, 17:02

Вот более точная формулировка моего вопроса.
Почему если здесь одно равно другому
public static final String name = "name";
public static final String _id = "_id";

то здесь
DB."name" неправильно, а DB.name правильно?
DB."_id" , DB._id соответственно ?

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 53. SimpleCursorTreeAdapter, пример использования

Сообщение Foenix » 03 дек 2013, 17:05

код даже читать не хочу, раз не форматируешь
в кавычках записывают только строки.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

WizikTLT
Сообщения: 52
Зарегистрирован: 01 ноя 2013, 13:30

Re: Урок 53. SimpleCursorTreeAdapter, пример использования

Сообщение WizikTLT » 03 дек 2013, 17:08

public static final String name = "name";
тут нету никакого правила что ИМЯ константы должно быть равно ее значению - ты мог написать и так
public static final String name_random = "name";

DB."name" - не верный синтаксис и к значению public static final String name = "name" никак не относится.
тыже не пишешь mDBHelper."getWritableDatabase()" в своем коде?
через точку ты обращаешься к переменным/методам класса

mihy
Сообщения: 1
Зарегистрирован: 13 дек 2013, 12:31

Re: Урок 53. SimpleCursorTreeAdapter, пример использования

Сообщение mihy » 13 дек 2013, 12:38

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?

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 53. SimpleCursorTreeAdapter, пример использования

Сообщение Foenix » 13 дек 2013, 13:15

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

ragvarod
Сообщения: 19
Зарегистрирован: 03 дек 2013, 20:25

Re: Урок 53. SimpleCursorTreeAdapter, пример использования

Сообщение ragvarod » 15 дек 2013, 20:31

Есть не большой вопрос! Подскажите, можно ли в childFrom заносить несколько столбцов таблицы? т.е.
String[] childFrom = { DB.PHONE_COLUMN_NAME,DB.PHONE_COLUMN_ID }; В таком виде, как написал я, отображается содержимое DB.PHONE_COLUMN_NAME

ragvarod
Сообщения: 19
Зарегистрирован: 03 дек 2013, 20:25

Re: Урок 53. SimpleCursorTreeAdapter, пример использования

Сообщение ragvarod » 17 дек 2013, 18:04

если не тродно,можете подсказать что я делаю не так:

Код: Выделить всё

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);
Код ошибки: The constructor SimpleCursorTreeAdapter(Context, Cursor, int, String[], int[], int, String[], int[], int, String[], int[]) is undefined

Ответить