ExpandableListView не появляется при запуске Activity

Yayy, кодирование - это так весело. Это моя третья попытка создания ExpandableListView, связанного с sqlite db. Последняя версия работала нормально при извлечении данных, но не настолько велика, когда мне нужно было удалить или отредактировать элемент. Он был основан на Api Demo, expandableListView 1 и 2. Код Api предположил, что я храню свою информацию в массиве, прежде чем ее можно будет поместить в ExpandablelistView. Я думаю, мы все можем увидеть проблему с удалением и обновлением элементов, которые хранятся в массиве. Я решил начать с чего-то гораздо более чистого.

Следующий код - это моя попытка создания активности, которая заполняет expandableListView со значениями sqllite db. Однако ничего не происходит, когда начинается действие, даже исключение.

Я предполагаю, что моя проблема заключается в browseView.setAdapter(mAdapter); но я действительно не знаю, о чем говорю, и не могу доказать это! Если я изменю приведенное выше на listadapter, он выдает исключение nullpointer.

Наконец, следует отметить, что мой курсор getChildren передает мою группуCursor прямо. Это только потому, что я не понял, что здесь происходит! BABYSTEPS.

Я на правильном пути здесь? Спасибо, что посмотрели.

public class BrowseActivity extends ExpandableListActivity {
final private String[] asColumnsToReturn = {
 Items.ITEMS_TABLE_NAME + "." + Items.ITEMS_ITEM,
 Items.ITEMS_TABLE_NAME + "." + Items.ITEMS_DESC,
 Items.ITEMS_TABLE_NAME + "." + Items.ITEMS_ID };
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.browse);
DbHelper dbh = new DbHelper(this.getApplicationContext());
SQLiteDatabase db = dbh.getWritableDatabase();
SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder();
queryBuilder.setTables(Items.ITEMS_TABLE_NAME);
ExpandableListView browseView = (ExpandableListView)findViewById(android.R.id.list);
Cursor mCursor = queryBuilder.query(db, asColumnsToReturn, null, null,
 null, null, Items.DEFAULT_SORT_ORDER);
startManagingCursor(mCursor);
SimpleCursorTreeAdapter mAdapter = new SimpleCursorTreeAdapter(this,
 mCursor, R.layout.row, R.layout.exprow,
 new String[] { Items.ITEMS_ITEM }, new int[] { R.id.txtItem },
 R.layout.exprow, R.layout.exprow, new String[] { Items.ITEMS_DESC },
 new int[] { R.id.dscItem }) {
 @Override
 protected Cursor getChildrenCursor(Cursor groupCursor) {
 return groupCursor;
 }
};
browseView.setAdapter(mAdapter);
}
}
***START NEW OF NEW CLASS FILE***
public class DbHelper extends SQLiteOpenHelper {
private static final int DATABASE_VERSION = 1;
private static final String DB_NAME = "itemList.db";
DbHelper(Context context) {
super(context, DB_NAME, null, DATABASE_VERSION);
} 
@Override
public void onCreate(SQLiteDatabase db){
db.execSQL("CREATE TABLE " + Items.ITEMS_TABLE_NAME + " (" 
 + BaseColumns._ID + " INTEGER PRIMARY KEY AUTOINCREMENT ," 
 + Items.ITEMS_ITEM + " TEXT," + Items.ITEMS_DESC + " TEXT," 
 + Items.ITEMS_MANU + " TEXT," + Items.ITEMS_UPC + " TEXT," +
 Items.ITEMS_NWEIGHT + " TEXT," + Items.ITEMS_AWEIGHT + " TEXT)");
}
 @Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
@Override
public void onOpen(SQLiteDatabase db){
super.onOpen(db);
}
}
***START OF NEW CLASS FILE***
public class ItemDatabase {
private ItemDatabase() {
}
public static final class Items implements BaseColumns {
private Items() {
}
public static final String ITEMS_TABLE_NAME = "table_itemList";
public static final String ITEMS_ID = "_id";
public static final String ITEMS_ITEM = "item";
public static final String ITEMS_DESC = "description";
public static final String ITEMS_MANU = "manufacturer";
public static final String ITEMS_UPC = "upc";
public static final String ITEMS_NWEIGHT = "netweight";
public static final String ITEMS_AWEIGHT = "actualweight";
public static final String DEFAULT_SORT_ORDER = "item ASC";
}

И файл "browse" xml:

1 ответ

Это потому, что я передал курсор Group прямо через метод getChildrenCursor(). Вы должны создать новый курсор внутри метода.

@Override
 protected Cursor getChildrenCursor(Cursor groupCursor) {
 String tempGroup = groupCursor.getString(groupCursor
 .getColumnIndex(Items.ITEMS_ITEM));
 DbHelper dbh = new DbHelper(BrowseActivity.this);
 SQLiteDatabase db = dbh.getWritableDatabase();
 String sqlString = "SELECT " + Items.ITEMS_ID + ", "
 + Items.ITEMS_DESC + ", " + Items.ITEMS_MANU + ", "
 + Items.ITEMS_NWEIGHT + ", " + Items.ITEMS_AWEIGHT + ", "
 + Items.ITEMS_UPC + " FROM " + Items.ITEMS_TABLE_NAME
 + " WHERE " + Items.ITEMS_ITEM + "=" + "'" + tempGroup
 + "'";
 Cursor mCursor = db.rawQuery(sqlString, null);
 return mCursor;
 }

И файл макета строки:

Наконец, макет expRow (немного длинный, у меня много табличных строк.Я должен признать, что вещи тоже плохо названы. Я просто хотел заставить его работать, пока не сделал это красиво!):

<!--?xml version="1.0" encoding="utf-8"?-->
<tablelayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_span="2" android:stretchcolumns="0">
<tablerow android:layout_height="wrap_content" android:id="@+id/tableRow1" android:layout_gravity="right" android:layout_width="wrap_content">
 <tablerow android:layout_height="wrap_content" android:layout_width="fill_parent" android:layout_weight="1" android:id="@+id/tableRow10" android:layout_gravity="right">
 
 </tablerow>
 
 </tablerow>
 <tablerow android:layout_height="wrap_content" android:layout_width="fill_parent" android:id="@+id/tableRow2">
 <tablerow android:layout_height="wrap_content" android:layout_width="fill_parent" android:id="@+id/tableRow9" android:layout_gravity="right" android:layout_weight="1">
 
 </tablerow>
 
 </tablerow>
 <tablerow android:layout_height="wrap_content" android:id="@+id/tableRow3" android:layout_width="fill_parent">
 <tablerow android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/tableRow6" android:layout_gravity="right" android:baselinealigned="true">
 
 </tablerow>
 <tablerow android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/tableRow7">
 
 </tablerow>
 </tablerow>
 <tablerow android:layout_height="wrap_content" android:id="@+id/tableRow5" android:layout_width="wrap_content">
 <tablerow android:layout_height="wrap_content" android:layout_width="fill_parent" android:id="@+id/tableRow12" android:layout_weight="1" android:layout_gravity="right">
 
 </tablerow>
 <tablerow android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/tableRow13">
 
 </tablerow>
 </tablerow>
 <tablerow android:id="@+id/tableRow4" android:layout_width="wrap_content" android:layout_height="wrap_content">
 <tablerow android:layout_height="wrap_content" android:layout_width="fill_parent" android:layout_weight="1" android:layout_gravity="right" android:id="@+id/tableRow14">
 
 </tablerow>
 
 </tablerow>
 </tablelayout>

licensed under cc by-sa 3.0 with attribution.