Страница 3 из 5

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

Добавлено: 23 окт 2013, 10:59
Isaev
Как перерисовать image в groupItem? В android.R.layout.simple_expandable_list_item_1 он не указан, откуда он вообще берется?

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

Добавлено: 23 окт 2013, 12:06
KamiSempai

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

Добавлено: 24 окт 2013, 09:14
Isaev
KamiSempai, там то я был, но откуда вставляется image это не помогло найти)

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

Добавлено: 24 окт 2013, 12:11
KamiSempai
Пардон, ссылка битая получилась вот более корректная:
То, что я мел ввиду

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

Добавлено: 03 дек 2013, 01:24
aleksbim
Помогите пжл разобраться!
В коде урока удаляю все final string и далее по коду называю все своими именами, как было упомянуто в final stringах.
Сохраняю и в MainActivity выходит ошибка.

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

Добавлено: 03 дек 2013, 08:09
Foenix
какая?

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

Добавлено: 03 дек 2013, 13:49
aleksbim
Подчеркнуто красным. DB cannot be resolved to a variable

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

Добавлено: 03 дек 2013, 14:06
WizikTLT
Убери тогда текст "DB." везде.

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

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

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

Добавлено: 03 дек 2013, 14:29
WizikTLT
Я почему то подумал ( по описанию), что он из класса DB все константы решил удалить и просто использовать названия полей.

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

Добавлено: 03 дек 2013, 14:30
Foenix
да кто его знает :)
имхо твой ответ правильный в данной ситуации, но способ программирования тут подкачал. Конечно, нужны константы.

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

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

Так выглядит у меня 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, пример использования

Добавлено: 03 дек 2013, 16:32
WizikTLT
public static final String name = "name";
public static final String _id = "_id";
таких строчек не хватает в твоем классе DB
и заместо
DB."name" пиши DB.name
DB."_id" пиши DB._id

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

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

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

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

Добавлено: 03 дек 2013, 17:05
Foenix
код даже читать не хочу, раз не форматируешь
в кавычках записывают только строки.

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

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

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

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

Добавлено: 13 дек 2013, 12:38
mihy
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?

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

Добавлено: 13 дек 2013, 13:15
Foenix
eto uge 100500 raz obsuzhdalos tut, ispolzuy poisk!

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

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

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

Добавлено: 17 дек 2013, 18:04
ragvarod
если не тродно,можете подсказать что я делаю не так:

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

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